기존에는 스프링부트 2.x를 사용해서 시큐리티 설정을 했었다.
package com.parkchoi.scrum.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfig{
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf().disable()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
return http.build();
}
}
가장 기본적인 security config 설정 코드인데
늘 하던 것처럼 csrf 비활성화 하고 세션 사용 안 하는 것으로 설정했는데
csrf와 sessionManagement에 빨간 줄이 뜨면서 deprecated가 떴다.
내용을 살펴보면 스프링 시큐리티 6.1부터 사용하지 않으며 앞으로 미래에 빠지니깐 다른 방법을 사용해라 이런 말이다.
그럼 다른 방법이 뭔데?
@Configuration
@EnableWebSecurity
public class SecurityConfig{
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf(AbstractHttpConfigurer::disable)
.sessionManagement((sessionManagement) ->
sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
);
return http.build();
}
}
이렇게 함수로 사용하는 것이다.
이 방법은 이전부터 사용이 가능하다고 했는데 대부분은 그냥 직렬로 연결하는 방법을 사용했었다(나 또한 그랬었고)
즉 메서드 체이닝을 이게 사용하지 말라고 하는 뜻이다
.csrf(AbstractHttpConfigurer::disable)
여기서 메서드 참조 방식을 사용한다.
메서드 참조란?
클래스::메서드 , 이 방식으로 클래스에서 해당 메서드를 부르는 것이다.
위에서는 AbstractHttpConfigurer 추상 클래스 안에 disable 메서드를 참조한다.
해당 추상 클래스에 들어가보면 disable 메서드가 있다.
이렇게 csrf를 비활성화 시켜준다.
이제 세션 설정 방법도 알아보자.
.sessionManagement((sessionManagement) ->
sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
);
여기서도 람다식을 활용해서 적용했다.
sessionManagement를 파라미터로 받아서
sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS) 이 값을 실행한다.
public SessionManagementConfigurer<H> sessionCreationPolicy(SessionCreationPolicy sessionCreationPolicy) {
Assert.notNull(sessionCreationPolicy, "sessionCreationPolicy cannot be null");
this.sessionPolicy = sessionCreationPolicy;
this.propertiesThatRequireImplicitAuthentication.add("sessionCreationPolicy = " + sessionCreationPolicy);
return this;
}
여기서 세션 정책을 파라미터로 집어넣어 설정해준다.
결국 스프링 시큐리티 6.1부터는 많은 부분이 deprecated 되었는데 대부분 람다식을 사용하도록 변경이 되었다.
'오류해결' 카테고리의 다른 글
모든 api 요청이 oauth2Login() 로직을 타는 문제 (1) | 2024.01.17 |
---|---|
API 응답에서 406 에러 발생 (0) | 2023.12.31 |
젠킨스 파이프라인 문법 에러 (1) | 2023.12.17 |
스프링부트 3.x에서 자바11 라이브러리 찾으려는 오류 (0) | 2023.12.15 |