티스토리 뷰

스프링 시큐리티 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

 

 

@Configuration
@EnableWebSecurity

먼저 어노테이션을 갖는 클래스를 만들고

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;
    }

 

아래 글을 참고하였습니다.

https://stackoverflow.com/questions/73378676/spring-boot-custom-authentication-filter-without-using-the-websecurityconfigur

 

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

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함