이전 글에서는 Custom Filter를 사용하는 이유와, 등록하고 사용하는 방법에 대해서 알아보았습니다[이전글 보기]
이번에는 이미 생성한 Custom Filter를 사용하지 않도록 즉, 제외하는 방법에 대해서 다뤄보겠습니다
두 가지 상황을 가정해 보겠습니다
1. 생성한 CustomFilter를 완전히 사용하지 않을 경우
2. 특정 상황 혹은 특정 환경(dev/prod) 에서 사용하고 싶지 않을 경우
먼저 Custom Filter를 완전히 사용하지 않고자 할 경우는 간단합니다.
해당 Filter에 @Component와 같은 어노테이션이 붙어있으면 해당 어노테이션을 제거하고
Spring Security FilterChain에 해당 Filter가 등록 되어 있다면 등록을 해제합니다.
// Component 어노테이션으로 Filter를 다루고 있는 경우
//@Component
class ApiKeyFilter(
// some Service
// some Repository
) : OncePerRequestFilter() {
override fun doFilterInternal(
request: HttpServletRequest,
response: HttpServletResponse,
filterChain: FilterChain
) {
// Service Call
// Repository Call
logger.info("test log")
filterChain.doFilter(request, response)
}
}
위 코드와 같이 @Component 어노테이션을 제거하면,
Spring Context의 관리를 받던 Filter를 관리 대상에서 제외할 수 있습니다
// FilterChain에 등록되어 있는 경우
@Configuration
@EnableWebSecurity
class SecurityConfig {
@Bean
fun filterChain(
http: HttpSecurity,
// apiKeyFilter: ApiKeyFilter
): SecurityFilterChain {
// http.addFilterBefore(apiKeyFilter, AuthorizationFilter::class.java)
return http.build()
}
}
위와 같이 FilterChain에서 Filter를 제외하면
FilterChain에 포함되어 관리 되던 Filter를 명시적으로 제거할 수 있습니다
다음은 특정 상황 혹은 특정 환경(dev/prod) 에서 사용하고 싶지 않을 경우 예시입니다
기본적으로 Filter는 FilterRegistrationBean 의 영향을 받습니다.
Spring Context에서 FilterRegistrationBean은 Filter를 탐색 해 서블릿 컨테이너(Servlet Container)에 등록하는 역할을 합니다
따라서 FilterRegistrationBean 를 제어함으로써 원하는 바를 이룰 수 있습니다
// FilterRegistrationBean 으로 제어하는 경우
@Profile("dev")
@Configuration
class NotUsingFilterConfig {
@Bean
fun apiKeyFilterRegistration(apiKeyFilter: ApiKeyFilter): FilterRegistrationBean<ApiKeyFilter> {
val registrationBean = FilterRegistrationBean(apiKeyFilter)
registrationBean.isEnabled = false
return registrationBean
}
}
위 코드와 같이 제외하고 싶은 Filter의 isEnabled 옵션을 false로 주고 해당 Filter에 대한 FilterRegistrationBean을 Bean으로 등록하면 Spring Context에 의한 제어로부터 Filter 사용을 제거할 수 있고
추가적으로 @Profile 어노테이션을 이용하면 특정 환경에 대해서만 제약을 가할 수 있습니다
'개발 > SpringBoot' 카테고리의 다른 글
(Java/Kotlin)[Spring Security] MockMvc 테스트 시, 특정 Filter 를 제외하기 (0) | 2023.11.30 |
---|---|
(Java/Kotlin)[Spring Security] - Custom Filter를 등록하는 방법 (feat.OncePerRequestFilter) (4) | 2023.11.25 |
Spring Boot 2.6 -> 2.7 변경 사항 (0) | 2023.06.19 |
Spring Boot 2.5 -> 2.6 변경 사항 (0) | 2023.06.15 |
Spring Boot 2.4 -> 2.5 변경 사항 (0) | 2023.06.12 |
댓글