스프링 시큐리티 5.7 이상에서 @WebMvcTest를 사용할 때 생기는 이슈

seungho choi·2022년 7월 2일
1

웹 레이어 테스트 코드 작성 중 스프링 시큐리티 설정을 하지 않아 기본 스프링 시큐리티 설정으로 처리 되어있어 post 요청시 403 응답을 내뱉는 이슈가 발생했다.

귀찮지만 테스트만 통과할 수 있게끔 시큐리티 설정 파일을 작성하던 중 기존까지 잘 사용해왔던 웹 시큐리티 설정을 담당하던 WebSecurityConfigurerAdapter 가 Deprecated 처리가 되었다.

보통 Depreated된 코드를 까보면 어떻게 해야할지 알려준다.

SecurityFilterChain 을 빈으로 HttpSecurity 설정 해라 이런 뜻인거 같다.

그래서 공식문서를 뒤져서 기존 WebSecurityConfigurerAdapter 대신 SecurityFilterChain 빈을 주입하는 방식으로 테스트만 통과하도록 시큐리티 설정을 구성해봤다.

자세한 사용 방법은 여기로

그리고 다시 테스트를 돌려봤다.

결과는

하.... 아마도 @WebMvcTestWebSecurityConfigurerAdapter 에 대한 설정파일은 읽는거 같지만 새로운 방식의 @EnableWebSecurity 어노테이션만 달린 설정파일을 읽어오지 못해서 생기는거 같다.

문제를 해결하기 위해 서칭 중 똑같은 스프링 깃허브에 똑같은 문제에 대해 이슈가 올라왔다.

https://github.com/spring-projects/spring-boot/issues/31162

이슈에 대해 내가 정리한 내용은

  • @WebMvcTest 는 슬라이스 테스트다. 모든 사람들이 SecurityConfig 에 대해 사용하지 않을 수 있다.

  • 스프링 팀에서는 @WebMvcTest를 구성할 때 @EnableWebSecurity 를 포함하는 이점보다 잠재적인 문제점이 많다고 생각해 기능을 추가할 생각은 없다.

  • 사용하고 싶으면 @ImportAutoConfiguration 를 사용해 테스트를 구성하고 권장하는 방식이다.

결론은 스프링 시큐리티 5.7을 기본적으로 포함하고 있는 스프링 부트 2.7 이상 부터는 @WebMvcTest 할 때는

이런식으로 ImportAutoConfiguration 를 사용해라

이럴거면 WebMvcTest 에 디폴트 SpringSecurityConfig를 의존하지 않도록 해주던가 ㅡㅡ;;

Reference

0개의 댓글