본문 바로가기
Spring/Spring

[Spring Security] 사장된 WebSecurityConfigurerAdapter

by 작은돼지 2023. 6. 6.

작년 2월부터 WebSecurityConfigurerAdapter를 상속받아

오버라이딩하는 방식은 Deprecated 되었고

 

지금은 Bean으로 등록하여 설정하는 방식을 이용해야 한다.

 

스프링 시큐리티 초보자 강의를 보고 있는데 예전 방식을 사용해서 매우 난해했다.

괜히 옛날 설정을 요즘 설정으로 변환하려다가

이 설정을 하려면 어떤 Bean을 만들어서 해야 하는 지 몰랐고

빈을 잘못 만들어서 순환참조 문제가 발생하고 아주 난리가 났다.

스프링 공식 사이트를 참고해서 어떤 식으로 바뀌었는지 천천히 다시 파악해보려고 한다.

 

1. SecurityFilterChain과 HttpSecurity

이전 방식

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests((authz) -> authz
                .anyRequest().authenticated()
            )
            .httpBasic(withDefaults());
    }

}

 

바뀐 방식 - SecurityFilterChain을 Bean으로 등록해서 사용 

@Configuration
public class SecurityConfiguration {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests((authz) -> authz
                .anyRequest().authenticated()
            )
            .httpBasic(withDefaults());
        return http.build();
    }

}

 

2. WebSecurity

이전 방식

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) {
        web.ignoring().antMatchers("/ignore1", "/ignore2");
    }

}

 

바뀐 방식 - WebSecurityCustomizer를 Bean으로 등록

@Configuration
public class SecurityConfiguration {

    @Bean
    public WebSecurityCustomizer webSecurityCustomizer() {
        return (web) -> web.ignoring().antMatchers("/ignore1", "/ignore2");
    }

}

 

3. AuthenticationManager

이전 방식

@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
	return super.authenticationManagerBean();
}

 

AuthenticationManager를 외부에서 사용할 수 있도록 등록하는 방법

@Bean
public AuthenticationManager authenticationManager(
			AuthenticationConfiguration authenticationConfiguration) throws Exception {

	return authenticationConfiguration.getAuthenticationManager();
}

 

4. PasswordEncoder

이전과 동일하거나 설정에 따라 다름 예) Bcrypt

@Bean
public PasswordEncoder passwordEncoder() {
	return new BCryptPasswordEncoder(); // 등등
}

 

출처


https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter

 

Spring Security without the WebSecurityConfigurerAdapter

In Spring Security 5.7.0-M2 we deprecated the WebSecurityConfigurerAdapter, as we encourage users to move towards a component-based security configuration. To assist with the transition to this new style of configuration, we have compiled a list of common

spring.io