Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Stack
- g1gc
- 그래프탐색
- 그래프 탐색
- deque
- Markdown
- 마크다운
- 빌더패턴
- 회고
- 그리디
- DP
- 면접복기
- springboot
- 백준
- 이진탐색
- 문제풀이
- GC
- github
- 구현
- 몬티홀
- 정수론
- 프로세스
- BFS
- 배열 돌리기1
- 분할정복
- GarbageCollector
- 적정 스레드
- 브루트포스
- Greedy
- Python
Archives
- Today
- Total
FeelingXD
[Spring-Security] 스프링부트3.x 버전에서 Security 설정 변경점들 본문
🤔 - 스프링 부트3.x 버전부터 Spring-Security 설정법들이 몇가지 변경 되었습니다. 알게 된점 몇가지를 작성합니다.
1. Security http Request 을 lambda 형식으로 !
기존 HttpSecurity 의 Request 관련 적용이 변경되었습니다.
//예시코드
@Bean
public SecurityFilterChain defaultFilter(HttpSecurity http) throws Exception {
http
.securityMatchers.requestMatchers("/api/**")
.and()
.authorizeHttpRequests.anyRequest().hasRole("USER")
.and()
.httpBasic(Customizer.withDefaults());
return http.build();
}
위의 예시처럼 .and() 로 http 리퀘스트 마다 체이닝을 통하여 추가적으로 허용은 어떤지, 어떤경로인지 등 옵션을 추가 할 수 있었습니다.
하지만 SpringSecurity 6.1 버전 이후부터 체이닝을 담당하는 .and() 방식이 deprecated 되었습니다.
그럼 어떻게 고쳐야하죠 ? 😣
이에 Spring 에서는 기존의 .and() 체이닝 방식을 대체하여 각 http 리퀘스트의 lambda 문법을 사용하기를 권장하고 있습니다.
// 예시입니다.
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
// 기존의 .and 체이닝을 대체야여 lambda 형식을 사용합니다.
// and() 사용시 오히려 복잡해보일수있는것들이 lambda 표현을 각각 역할을 분명하게 명시합니다.
http
.securityMatchers((matchers) -> matchers
.requestMatchers("/api/**")
)
.authorizeHttpRequests((authorize) -> authorize
.anyRequest().hasRole("USER")
)
.httpBasic(Customizer.withDefaults());
return http.build();
}
}
2. WebSecurityConfigurerAdapter 대신 필터를 @bean으로 등록하자
스프링 문서를 참고해보면 다음과 같이 기존의 WebSecurityConfigurerAdapter를 사용하는 대신 각 SecurityFilterChain 을 등록하는것으로 사용하길 권하고 있습니다.
Deprecated.
Use a SecurityFilterChain Bean to configure HttpSecurity or a WebSecurityCustomizer Bean to configure WebSecurity
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
//기존의 필터 대신 Configuration 을 직접 조정하는 방법입니다.
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authz) -> authz
.anyRequest().authenticated()
)
.httpBasic(withDefaults());
}
}
@Configuration
public class SecurityConfiguration {
@Bean // -> Bean 을 등록하여 deligate proxyfilter 체인에 등록하는걸 권장합니다.
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authz) -> authz
.anyRequest().authenticated()
)
.httpBasic(withDefaults());
return http.build();
}
}
많은 변경점 이 있으니 간혹 gradle 에서 build 하다 deprecated 된 패키지가 있다면 공식 문서를 한번씩 확인하는 습관이 있으면 좋을것 같습니다.
참조
'프로그래밍 > Spring' 카테고리의 다른 글
[Spring] 스프링 웹서버 멀티 포트로 열기 (0) | 2024.09.14 |
---|---|
[Spring-Security] 스프링 부트3 에서 특정 url 에 스프링 시큐리티 필터 무시하기 (0) | 2024.03.08 |