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 шт):

Автор решения: Arty Mart

В моем случае необходимо было создать базовую аутентификацию в Сервисе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;
}
→ Ссылка