이번 글에서는 MockMvc 테스트 시, 특정 Filter를 사용하지 않도록 하는 방법에 대해서 다뤄보겠습니다
미리 말씀드리자면 이 방법은 편법에 가깝다고 생각합니다
더 나은 방법이 있다면 해당 방법을 사용하는 것을 권장합니다
먼저 Spring에서 Bean을 등록할 때 Bean 이름은 기본적으로 Bean의 타입 (또는 클래스)을 기반으로 생성됩니다.
Bean의 이름이 같은 경우에는 나중에 정의된 Bean이 이전에 정의된 Bean을 오버라이드하게 됩니다.
따라서 @TestConfiguration 어노테이션이 명시된 클래스 내에서 제외하고자 하는 Bean을 재정의하면
이 Bean은 이전에 정의된 Bean을 오버라이드합니다.
이를 Filter에 적용하면
Test 패키지 내에 MockMvc 테스트에서 제외하고자 하는 Filter를 동일하게 생성해주고
내부 동작은 단순 다음 FilterChain에 Servlet요청, 응답을 전달하는 구조로 생성합니다
// test 패키지
class ApiKeyFilter : OncePerRequestFilter() {
override fun doFilterInternal(
request: HttpServletRequest,
response: HttpServletResponse,
filterChain: FilterChain
) {
filterChain.doFilter(request, response)
}
}
그 이후 Test Package 내 @TestConfiguration으로 명시 한 클래스 내부에 해당 Fitler를 Bean으로 등록해 줍니다
@TestConfiguration
public class TestFilterConfig {
@Bean
public ApiKeyFilter apiKeyFilter() {
return new ApiKeyFilter();
}
}
코드를 위와 같이 작성하면
실제로 어떤 로직도 포함하지 않은 ApiKeyFilter가 기존의 ApiKeyFilter를 Test 환경에서만 override 하여
Spring Test Context에 등록되기에 특정 Filter를 제외한 것과 동일한 동작을 수행할 수 있습니다
이는 Filter에 국한되는 것이 아니라
Spring Context에서 관리되는 모든 Bean에도 동일하게 적용이 가능합니다
Github : kotlin 예시
Github : Java 예시
이전 글 보기
(Java/Kotlin)[Spring Security] - Custom Filter를 등록하는 방법 (feat.OncePerRequestFilter)
(Java/Kotlin)[Spring Security] - Custom Filter를 등록하는 방법 (feat.OncePerRequestFilter)
Spring을 사용하는 환경에서 Custom Filter를 만들어 사용하는 일반적인 목적은 두 가지가 있습니다 (1) Client로부터 요청이 들어올 때, 요청이 Controller에 유입되기 전 사전처리 혹은 후처리를 하고 싶
far-ming.tistory.com
(Java/Kotlin)[Spring Security] - Custom Filter를 제외하는 방법
(Java/Kotlin)[Spring Security] - Custom Filter를 제외하는 방법
이전 글에서는 Custom Filter를 사용하는 이유와, 등록하고 사용하는 방법에 대해서 알아보았습니다[이전글 보기] (Java/Kotlin)[Spring Security] - Custom Filter를 등록하는 방법 (feat.OncePerRequestFilter) Spring을
far-ming.tistory.com
'개발 > SpringBoot' 카테고리의 다른 글
(Java/Kotlin)[Spring Security] - Custom Filter를 제외하는 방법 (0) | 2023.11.28 |
---|---|
(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 |
댓글