일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 스레드 풀
- Redis
- Kotlin
- gatway
- 비관적 락
- HTTP
- AWS
- 삭제 이상
- null
- 데이터베이스
- Kafka
- 자바
- 3-way handshaking
- JPA
- 캐시 오염
- 갱신 이상
- ocp
- 정규화
- buildSrc
- well-know port
- 페이지네이션
- 네트워크
- DB
- Spring
- 삽입 이상
- 낙관적 락
- java
- Dirty Checking
- 자료구조
- MSA
- Today
- Total
어 나 갱수.
[Spring] SpringSecurity 6.1에서 SecurityConfig 마이그레이션 본문
SpringWebflux 환경에서 아래와 같이 SecurityConfig 클래스를 생성하였습니다.
@Configuration
@EnableWebFluxSecurity
class SecurityConfig {
@Bean
fun passwordEncoder() = BCryptPasswordEncoder()
@Bean
protected fun filterChain(http: ServerHttpSecurity): SecurityWebFilterChain {
return http
.httpBasic().disable()
.formLogin().disable()
.csrf().disable()
.cors().disable()
.authorizeExchange()
.anyExchange().permitAll()
.and().build()
}
}
아래와 같은 에러가 발생하였습니다.
문제 분석
해당 문제는 SpringSecurity 6.1 이상 버전을 사용하면 발생하는 문제입니다.
Spring Security 6.1.0
SpringBoot 3.1.0 버전은 Spring Security 6.1.0 버전을 dependency 합니다.
Spring Security 6.1.0의 release note를 살펴보면 and()와 non-lambda DSL methods를 deprecating 했습니다.
non-lambda DSL이란 ?
Spring Security 5.2 release부터 lamda DSL을 지원해왔습니다. 예전에는 lambda DSL사용이 선택사항이었습니다.
이번 release 부터 dprecated 되어 무조건 lambda DSL사용을 해야 했습니다.
Spring Security 6.1 이상에서, httpBasic(), formLogin(), csrf(), cors(), authorizeExchange() 등의 메서드를 사용하여 보안 구성을 진행할 때, 이전 버전에서 사용되던 .disable() 방식 대신 새로운 람다 기반의 구성 방식을 채택하고 있습니다.
이는 보안 구성을 더 유연하고 세밀하게 조정할 수 있도록 돕기 위한 변경입니다.
해당 프로젝트에서는 SpringSecurity 6.2.1 버전을 사용함으로 SecurityConfig 클래스의 수정이 필요합니다.
문제 해결
문제를 해결하기 위해서는, Spring Security의 새로운 설정 방식에 맞추어 SecurityConfig 클래스를 업데이트해야 했습니다. 각 설정을 비활성화하기 위해 .disable() 메소드를 직접 호출하는 대신, 해당 설정을 lambda 표현식으로 전달하고 내부에서 .disable()을 호출하는 방식으로 변경했습니다.
이러한 변경을 통해, Spring Security의 최신 버전과 호환되는 방식으로 코드를 재구성할 수 있었습니다.
@Configuration
@EnableWebFluxSecurity
class SecurityConfig {
@Bean
fun passwordEncoder() = BCryptPasswordEncoder()
@Bean
protected fun filterChain(http: ServerHttpSecurity): SecurityWebFilterChain {
return http
.httpBasic { httpBasic -> httpBasic.disable() }
.formLogin { formLogin -> formLogin.disable() }
.csrf { csrf -> csrf.disable() }
.cors { cors -> cors.disable() }
.authorizeExchange { auth ->
auth
.anyExchange().permitAll()
}
.build()
}
}
'Spring' 카테고리의 다른 글
[Spring] AOP를 적용한 logging을 해보자 (0) | 2024.05.10 |
---|---|
[Spring] Spring Cloud Gateway RewritePath 경로 문제 (0) | 2024.04.29 |
[Spring Boot] ResponseEntity를 왜 사용하나요 ? 😀 (0) | 2024.03.01 |
[Spring] 싱글톤 패턴 🐶 (0) | 2024.02.06 |
[JPA] JPA 영속성 컨텍스트 🤫 (6) | 2023.12.03 |