[Spring] Spring Boot 3.1.0, Spring 6.1, Spring Security 6.1 : Security Config deprecated

유아 Yooa·2023년 6월 6일
4

Spring

목록 보기
11/18
post-thumbnail

Springboot 3.1.0 환경에서 Spring Security로 인증 방식을 구현하던 중 FilterChain 등록 코드에서 deprecated 에러 사인이 등장했다.

'csrf()' is deprecated and marked for removal 


평소에 Springboot 2.7.x 버전으로 익숙하게 코드를 짜왔다면 왜 나한테만 이러는건데 기분이 들 수도 있는 deprecated 사인이다.


Spring Security 6.1.0

SpringBoot 3.1.0 버전은 Spring Security 6.1.0 버전을 dependency 한다.

Spring Security 6.1.0의 release note를 살펴보면 and()와 non-lamda DSL methods를 deprecating 했다고👀

non-lamda DSL?

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

왜 deprecated 된건데?

Spring Security Preparing for 7.0 - Configuration Migrations에서 아래와 같은 이유를 설명했다.

  • non-lamda DSL 방식은 반환 타입을 알지 못한 상태에서 어떤 개체 구성이 이루어지는지 명확하지 않았다.
  • 이것은 중첩이 깊어질수록 더욱 혼란스러웠다.
  • lamda DSL과 non-lamda DSL 스타일 사이에서 일관성 없는 코드가 많았고 이것이 실제로 잘못된 설정을 야기하기도 했다.

lamda DSL

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

lamda DSL은 아래와 같은 이점을 가진다고.

  • 메서드 체이닝에서.and()를 사용하여 연결하지 않아도 된다.
    • 람다 메서드를 호출한 후 추가 구성을 위해 HttpSecurity 인스턴스가 자동으로 반환되기 때문.
    • 기존 and() 방식은 관계가 없는 요소들 끼리도 서로 직렬로 연결해서 사용해야 했다.
  • 자동 들여쓰기를 사용하면 configuration을 보다 쉽게 읽을 수 있다.
  • Spring Integration 및 Spring Cloud Gateway와 같은 다른 Spring DSL과 유사한 구성 스타일을 가지고 있다.

그럼 이제 어떻게 migration하라고..?

에러가 난 라인에 커서를 가져다대면 친절하게 안내해준다.


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

profile
기록이 주는 즐거움

2개의 댓글

comment-user-thumbnail
2023년 6월 21일

와 덕분에 속이 뚫렸습니다 너무 감사합니다

1개의 답글