Spring Boot 3.1.x, Spring Framework 6.1.x
Spring Security Deprecated Configuration
Spring Boot 2.x 대 버전을 사용하다가,
이번에 Spring Boot 3.1 버전을 사용할 일이 생겼는데 변경 점이 있어 작성합니다.
Deprecated된 메서드를 보고 띠용..!!!했지만?! 아래 사이트 를 보고 참고하여 해결한 내용을 작성합니다.
https://docs.spring.io/spring-security/reference/whats-new.html
변경점1. and() 메소드 Deprecated
변경점2. non-Lamda DSL Method Deprecated
Lamda DSL
Spring Security 5.2 에서 release 된 내용으로 기존에는 선택사항으로 제공되었습니다.
Spring Security 6.1에서는 기존의 방식을 Deprecated하고 Lambda DSL로 필수적으로 구성하도록 하였습니다.
Spring 공식 문서를 보면, Lamda DSL 구성을 사용하는 이유와 Lamda DSL의 목표를 아래와 같이 설명하고 있습니다.
Lamda DSL 구성을 사용하는 이유
- 이전 사용방식에서는 반환 유형을 정확히 모르며, 어떤 개체가 구성되어있는지 명확하게 확인 할 수 없다.
- 중첩이 깊어질 수록 가독성이 떨어지고 많은 코드베이스가 구성을 이해하기 어렵게 하였고, 잘못된 구성으로 이어지는 상황이 발생했다.
Lamda DSL의 목표
- and() 메서드를 통해 옵션을 연결할 필요가 없음
- 자동 들여쓰기를 위해 구성을 더 읽기 쉽게 만듬.
Spring Security Configuration 작성
아래처럼 작성하려고 하면 csrf 메서드에 빨간줄이 표시가 되면서 아래처럼 Deprecated 내용을 표시합니다.
6.1에서 deprecated 되었으며, 작성가이드를 제공하고 있습니다.
아래는 샘플로 작성한 작성 예시이므로 본인의 환경에 맞게 필요한 설정들을 적용하시면 됩니다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.httpBasic(AbstractHttpConfigurer::disable)
.csrf(AbstractHttpConfigurer::disable)
.cors(Customizer.withDefaults())
.headers(header -> header.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable))
.authorizeHttpRequests(
registry -> registry.requestMatchers("/v3/api-docs/**", "/swagger-ui/**", "/swagger-resources/**")
.permitAll()
.anyRequest()
.authenticated()
)
.sessionManagement(config -> config.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
return httpSecurity.build();
}
}
참고:
https://docs.spring.io/spring-security/reference/whats-new.html
https://spring.io/blog/2019/11/21/spring-security-lambda-dsl
'Develop > Spring' 카테고리의 다른 글
Spring Framework 6.0, Spring Boot 3.0 Preview (0) | 2023.07.13 |
---|