RestTemplate в сервис со Spring Security
Я новичок в спринге. У меня есть 2 сервиса на спринге которые работают совместно. Пусть это будет Сервис1 и Сервис2. Сервис1 настроен при помощи spring security через jwt токен. Сервис2 тоже настроен через spring security, но не через jwt, а через хранение паролей в памяти. Выглядит он примерно так:
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
UserBuilder userBuilder = User.withDefaultPasswordEncoder();
auth.inMemoryAuthentication()
.withUser(userBuilder
.username("test")
.password("testtest")
.roles("API"));
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/api/**").hasRole("API").and().formLogin().permitAll();
}
}
В Сервисе1 есть метод, который должен получать инфу из Сервиса2 по RestTemplate. Выглядит он так:
File fileResponseEntity = restTemplate.getForObject(URL, File.class);
Конечно же, после настройки защиты Сервиса2 он выдает ошибку 401:Unauthorized.
Понимаю, что в запросе, надо как то передавать логин и пароль, но как это реализовать не знаю. Возможно ли как то подтянуть параметры авторизации в мой RestTemplate?
Ответы (1 шт):
В моем случае необходимо было создать базовую аутентификацию в Сервисе2.
@EnableWebSecurity
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
UserBuilder userBuilder = User.withDefaultPasswordEncoder();
auth.inMemoryAuthentication()
.withUser(userBuilder
.username("user")
.password("testtest")
.roles("API"));
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic();
}
}
В Сервисе1 надо было дополнить бин RestTemplate следующим образом:
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getInterceptors().add(new BasicAuthenticationInterceptor("user", "testtest"));
return restTemplate;
}