티스토리 뷰
websecurityconfigureradapter is deprecated 이슈 및 해당 버전의 authenticationManager 설정
개발자 하나 2023. 1. 18. 00:31스프링 시큐리티 5.7.0 이후부터 websecurityconfigureradapter를 사용하면
websecurityconfigureradapter is deprecated가 나타납니다.
스프링부트 2.7.8 버전을 사용했더니 시큐리티 버전이 올라 코드 마이그레이션이 필요했습니다.
스프링 블로그에 해결 방법이 올라와 있습니다.
https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter
Spring Security without the WebSecurityConfigurerAdapter
<p>In Spring Security 5.7.0-M2 we <a href="https://github.com/spring-projects/spring-security/issues/10822">deprecated</a> the <code>WebSecurityConfigurerAdapter</code>, as we encourage users to move towards a component-based security configuration.</p> <p
spring.io
먼저 어노테이션을 갖는 클래스를 만들고
SecurityFilterChain으로 빈을 만들어 http basic 관련 설정을 합니다.
전
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests().antMatchers("/**")
.and().addFilter(getAuthenticationFilter());
http.headers().frameOptions().disable();
}
}
후
@Configuration
public class SecurityConfiguration {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests().antMatchers("/**")
.and().addFilter(getAuthenticationFilter());
http.headers().frameOptions().disable();
return http.build();
}
}
AuthenticationManagerBuilder를 사용해서 AuthenticationManager 설정하는 부분이 문제였습니다. 일반적으로는 이렇게 해놓으면 알아서 설정이 됩니다.
@Bean
public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception {
AuthenticationManager authManager = authenticationConfiguration.getAuthenticationManager();
return authManager;
}
http basic 설정에서 UsernamePasswordAuthenticationFilter를 상속하는 커스텀 클래스 AuthenticationFilter를 등록해야하는데,
AuthenticationFilter를 http basic 설정에 addFilter(getAuthenticationFilter())를 하면 authenticationManager 빈 이전에 실행되어 authenticationfilter에서 null을 반환합니다.
그래서 authenticationfilter(UsernamepasswordAuthenticationFilter 상속 클래스)를 http basic 설정시 생성할 때 코드를 수정하였습니다.
//클래스에 @RequiredArgsConstructor 어노테이션 사용
private final AuthenticationManagerBuilder authManagerBuilder;
private final Environment env;
private final UserService userService;
private AuthenticationFilter getAuthenticationFilter() throws Exception {
AuthenticationManager authManager = authManagerBuilder.getOrBuild();
AuthenticationFilter authFilter = new AuthenticationFilter(authManager, userService, env);
return authFilter;
}
아래 글을 참고하였습니다.
Spring Boot - Custom Authentication Filter without using the WebSecurityConfigurerAdapter
I am trying to migrate a code that used the old springboot security configuration with the WebSecurityConfigurerAdapter to the new component based security config, i have a custom authentication fi...
stackoverflow.com