[트러블 슈팅] Spring Security로 인한 WebMvcTest 401 에러

Jake·2022년 10월 11일
2

1. 결론부터

  • SecurityConfig.class import문 추가
  • mockMvc에 빌드

@WebMvcTest(SomeController.class)
@Import(SecurityConfig.class)
public class SomeControllerTest {

	private mockMvc;
    
    @Autowired
    private WebApplicationContext context;
    
	@Before
    public void setUp() {
        this.mockMvc = MockMvcBuilders
                        .webAppContextSetup(context)
                        .apply(springSecurity())
                        .build();
    }
}

2. WebMvcTest는 Spring Security 설정을 끌어오지 않는다

@WebMvcTest will auto-configure the Spring MVC infrastructure and limit scanned beans to @Controller, @ControllerAdvice, @JsonComponent, Filter, WebMvcConfigurer and HandlerMethodArgumentResolver. Regular @Component beans will not be scanned when using this annotation.

위 내용을 정리하면

  • @WebMvcTest는 컴포넌트 스캔을 하는 영역이 제한적이다 (@SpringBootTest는 프로젝트 전체를 싹 다 훑는다)

  • 이 때, 따로 Spring Security 관련 설정을 주입해주지 않는다면 @WebMvcTest는 시큐리티 관련 설정을 디폴트 값으로 설정한다 (auto configuration to default setting).

  • 여기서 디폴트 설정 중 하나가, 모든 url을 secure 설정하는 것.

! 즉, 개발자가 SecurityConfig에서 어떤 설정을 했는지에 관계 없이 test에서는 모든 url이 secure로 설정되고

! 이에 따라 401 에러가 발생하는 것


3. 해결책 설명

  • 해결 방법은 mockMvc에 Security 설정을 수동으로 주입해주는 것
profile
Java/Spring Back-End Developer

0개의 댓글