Springboot 3.1.0 환경에서 Spring Security로 인증 방식을 구현하던 중 FilterChain 등록 코드에서 deprecated
에러 사인이 등장했다.
'csrf()' is deprecated and marked for removal
평소에 Springboot 2.7.x 버전으로 익숙하게 코드를 짜왔다면 왜 나한테만 이러는건데
기분이 들 수도 있는 deprecated 사인이다.
SpringBoot 3.1.0 버전은 Spring Security 6.1.0 버전을 dependency 한다.
Spring Security 6.1.0의 release note를 살펴보면 and()
와 non-lamda DSL methods를 deprecating 했다고👀
Spring Security 5.2 release 부터 lamda DSL을 지원해왔는데 선택사항으로 남겨져 있었다. 이번 release 부터 dprecated 되어 사용할 수 없다.
non-lamda DSL
이란 Security config 관련 레퍼런스로 많이 떠돌아다니는 아래와 같은 코드를 뜻한다.
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/blog/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.rememberMe();
}
}
Spring Security Preparing for 7.0 - Configuration Migrations에서 아래와 같은 이유를 설명했다.
lamda DSL은 말 그대로 lamda를 사용한 DSL이라고 보면 된다.
- DSL은 비지니스의 의도를 명확하게 하고 가독성을 높이기 위해 구현한 코드이다.
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests(authorizeRequests ->
authorizeRequests
.antMatchers("/blog/**").permitAll()
.anyRequest().authenticated()
)
.formLogin(formLogin ->
formLogin
.loginPage("/login")
.permitAll()
)
.rememberMe(withDefaults());
}
}
.and()
를 사용하여 연결하지 않아도 된다.HttpSecurity
인스턴스가 자동으로 반환되기 때문.and()
방식은 관계가 없는 요소들 끼리도 서로 직렬로 연결해서 사용해야 했다.에러가 난 라인에 커서를 가져다대면 친절하게 안내해준다.
ref
Spring Security Preparing for 7.0 - Configuration Migrations
10장 - 람다를 이용한 도메인 전용 언어
Spring Security - 설정(Spring Security 6.1)
Spring Boot 3.1 Release Notes
Spring Security 6.1.0 github
와 덕분에 속이 뚫렸습니다 너무 감사합니다