Webmvc Spring-security와 충돌

임규성·2025년 1월 21일

ref : Spring Security 추가로 인한 Test Code refactoring

문제 제기

이번 프로젝트에서 처음으로 Spring-security를 도입하면서...
Webmvc테스트 도중 401에러와 403에러가 무수히 발생했다...!!!

왜 이런 에러가 날까?

이유1. @Webmvc 테스트는 기본적으로 spring seucirty 관련 컴포넌트를 스캔하게 된다...!!

해결법

따라서 해당 필터를 exclude해준다...!!

코드

@WebMvcTest(
        excludeFilters = {
                @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = SecurityConfig.class)
        }
)
@Import({Slf4jRestControllerAdvice.class, ControllerAdviceTest.TestController.class})
public class ControllerAdviceTest {
	... 생략
}

이유2. csrf token검사가 기본값이라서 이를 해제하지 않으면 에러가 발생한다.

해결법

TestConfiguration을 추가적으로 만들어준다.

코드

@WebMvcTest(
        excludeFilters = {
                @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = SecurityConfig.class)
        }
)
@Import({Slf4jRestControllerAdvice.class, ControllerAdviceTest.TestController.class})
public class ControllerAdviceTest {
	... 생략
    
    @TestConfiguration
    static class SecurityConfig {
        @Bean
        public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
            // CSRF 보호 비활성화
            http
                    .csrf((auth) -> auth.disable());
            return http.build();
        }
    }
}

환경

Language : JAVA 21, JDK21
Framework : spring-boot 3.4.1
IDE : intellij

profile
삶의 질을 높여주는 개발자

0개의 댓글