Spring Boot 3.1(Spring 6.1) Security Config: 'csrf()' is deprecated and marked for removal

Letsdev·2023년 5월 23일
16
post-thumbnail
post-custom-banner

변화

서로 무관한 애들끼리도 직렬로 이어지던 이런 메서드 체이닝을 지양하고

    .csrf().disable()

    .sessionManagement().sessionCreationPolicy(...)

    .and()
    .authorizeHttpRequests()
    // ...

함수형으로 잘 수납해서 쓰면 된다.
(이전에도 지원하는 방식이었지만 사람들이 잘 안 썼음.)

    .csrf(이곳에 CSRF 설정을 위한 함수)

    .sessionManagement(이곳에 세션 설정을 위한 함수)

    .authorizeHttpRequest(이곳에 인가 설정을 위한 함수);

코드 예시

기존(Deprecated)

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .csrf().disable()

                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)

                .and()
                .authorizeHttpRequests()
                .anyRequest().permitAll();

        return http.build();
    }
}

변경된 코드

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .csrf(AbstractHttpConfigurer::disable)
                .sessionManagement((sessionManagement) ->
                        sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                )
                .authorizeHttpRequests((authorizeRequests) ->
                        authorizeRequests.anyRequest().permitAll()
                );

        return http.build();
    }
}

이미 잘 만들어진 메서드는 Method Reference 연산자로(::),
이제 작업할 함수는 람다식(()->{}) 등으로 전달하는 게 일반적이다.

profile
아 성장판 쑤셔 (블로그 이전) https://letsdev.hashnode.dev
post-custom-banner

3개의 댓글

comment-user-thumbnail
2024년 1월 12일

감사합니다

답글 달기
comment-user-thumbnail
2024년 1월 17일

혹시 함수형으로 쓸 때 매개변수에는 무엇이 들어가는지 어떻게 알 수 있나요??
csrf는 왜 메소드 참조로 쓰고 다른 것들은 람다식으로 쓰는데 그 이유가 무엇인지 알 수 있을까요?

답글 달기