[Spring Boot] SecurityConfig 구현하기(WebSecurityConfigurerAdapter 없이)
Spring Security 5.7.0 버전을 기점으로 WebSecurityConfigurerAdapter가 Deprecated 되었습니다.(벌써 작년 2월에 되었는데, 이슈에 약한 것 같다ㅠ 애초에 첫 직장 입사하기 전부터 없었잖아?) WebSecurityConfigurerAdapter를 상속받아 Configure를 작성하고 있었는데, 없이 구축할 수 있는 방법이 Spring 블로그에 작성되어 있어 따라가 보려고 합니다. 포스팅에 따르면 컴포넌트 기반의 Security Configuration을 위해 Deprecated 되었다고 합니다.
Spring Blog에 더 자세히 나와있으니, 참고한 포스팅 링크를 첨부드립니다.
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
자 이어가볼까요? 다음은 5.7.0버전 이전의 Configuration입니다.
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authz) -> authz
.anyRequest().authenticated()
)
.httpBasic(withDefaults());
}
}
보시다시피 WebSecurityConfigurerAdapter를 상속하고, configure 메소드를 override해서 사용하는 것을 볼 수 있습니다.
그렇다면, 바뀐 버전은 어떻게 될까요?
@Configuration
public class SecurityConfiguration {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authz) -> authz
.anyRequest().authenticated()
)
.httpBasic(withDefaults());
return http.build();
}
}
바뀐 부분을 중점으로 살펴보자면, 라이브러리에서 상속받는 클래스가 없어졌고, SecurityFilterChain을 구현하여 직접 빈 주입을 해주는 방식으로 변했습니다.
개인적으로 위 방식으로 변화하면서 이전에는 상속받는 클래스(Web~~ 너무길다.)에 대한 이해없이 일단 기본 Config를 작성하기 위해 배껴오곤 했기 때문에 WebSecurityConfigurerAdapter 클래스에 대한 이해를 하지 못하고 썼었는데, 직관적으로 SecurityFilterChain에 추가해주는 것을 보니 직관적으로 동작하는 방식을 이해할 수 있어 좋았습니다. 현재 코틀린으로 짜고 있기 때문에 코틀린으로 작성한 코드를 올려 마무리하려고 합니다.
@Configuration
class WebSecurityConfig {
@Bean
fun configure(http: HttpSecurity): SecurityFilterChain {
http
.authorizeHttpRequests().
anyRequest().permitAll();
return http.build()
}
}
마무리하려고 봤는데,, HttpSecurity에 authroizeHttpRequests도 deprecated 되었네요...? 6.1버전 이후로 ..? 저는 지금 6.2버전을 사용하고 있기 때문에, 한번 찾아봅시다.(다음에 수정해서 올릴게요.. 졸려요)
(포스팅 전반부에 Spring Security lambda DSL과 HttpSecurity#authorizedHttpRequests메소드를 이용한다고 되어 있는데, lambda DSL에 대해 알아봐야겠다.)