최근 새로운 팀원들과 재밌는 프로젝트를 시작했습니다. 😊
새로운 시작과 함께 설계와 요구사항을 정의하느라 바쁜 나날을 보냈습니다.
이제 본격적으로 개발 단계에 접어들어 새로운 스프링 버전(2.7.1)을 채택하고 개발을 시작했습니다.
하지만, Spring Security 설정을 작성하다 예상치 못한 곳에서 문제를 만났습니다.
그 문제는 바로 WebSecurityConfigurerAdapter
요 녀석입니다.
Spring Security 관련 설정을 할 때
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
...
}
요런 식으로 상속받아 configure
메소드를 오버라이딩하며 잘 사용해왔지만...
WebSecurityConfigurerAdapter 이렇게 deprecated되어있는 녀석을 보게 되었습니다.
Spring 공식 블로그에 따르면,
Spring Security 5.7.0-M2 부터 WebSecurityConfigurerAdapter가 deprecated되었다고 합니다.
그 이유는 바로 component-based security configuration
로의 사용자들의 전환을 격려하기 위함이라고 합니다. 이런 새로운 스타일의 설정으로의 이동을 돕기 위해, Spring 팀은 많은 노력을 진행했다고 합니다. (많은 use-case들과 앞으로 나올 대안들을 정리하고 분석했다고 합니다. 대단..😲)
그렇다면, 이제 사라질 WebSecurityConfigurerAdapter
을 놓아주면서 기존의 코드를 어떤 방식으로 수정할 수 있는지 알아보겠습니다.
기존 방식
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authz) -> authz
.anyRequest().authenticated()
)
.httpBasic(withDefaults());
}
}
새로운 방식
@Configuration
public class SecurityConfiguration {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authz) -> authz
.anyRequest().authenticated()
)
.httpBasic(withDefaults());
return http.build();
}
}
기존에는 WebSecurityConfigurerAdapter
를 상속받고 configure
메서드를 오버라이딩하여 설정들을 정의했습니다.
하지만, 바뀐 새로운 방식에서는 configure
메서드를 오버라이딩하는 방식이 아닌 설정들을 하나의 Bean으로 등록하고 SecurityFilterChain
를 리턴합니다.
SecurityFilterChain은 Spring Security 5.4 버전에서 업데이트되었습니다.
https://github.com/spring-projects/spring-security/issues/8804
WebSecurity도 봐보겠습니다.
기존 방식
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) {
web.ignoring().antMatchers("/ignore1", "/ignore2");
}
}
새로운 방식
@Configuration
public class SecurityConfiguration {
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring().antMatchers("/ignore1", "/ignore2");
}
}
WebSecurity도 HttpSecurity와 마찬가지로 더이상 configure
메서드를 오버라이딩 하지 않습니다.
대신 설정을 하나의 Bean으로 등록하고 WebSecurityCustomizer
를 리턴합니다.
WebSecurityCustomizer는 Spring Security 5.4 버전에서 업데이트되었습니다.
https://github.com/spring-projects/spring-security/issues/8978
👉 Spring에서는 WebSecurity
를 사용해서 특정 request를 ignore하려고 한다면, HttpSecurity
의 authorizeHttpRequests
의 permitAll
메서드를 사용하는 것을 권장합니다.
그 외 설정 내에서 사용하는 메서드들은 대부분 그대로 사용할 수 있었습니다.
이 외에도 LDAP Authentication, JDBC Authentication, In-Memory Authentication, Local AuthenticationManager, Accessing the local AuthenticationManager에 관한 정보를 알고 싶으시다면 Spring 공식 블로그를 참고하시면 좋을 것 같습니다!
Spring 팀은 Component-based Security Configuration
로의 사용자들의 전환을 위해 WebSecurityConfigurerAdapter
를 deprecated 시키고 새로운 설정 방식을 도입했습니다.
기존 configure
메서드를 오버라이딩하여 설정을 진행하는 것이 아닌 설정들을 하나의 Bean으로 등록하는 Component화를 진행했습니다.
모든 예시코드는 Spring 공식 블로그에서 제공한 코드를 사용하였습니다.
감사합니다.