HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
♥️
2기 최종 프로젝트 팀별 공간
/
💸
10원모아10조❗️
/
🏝️
Back End
/
🗑️
메모
/
🔐
SpringSecurity 삽질
🔐

SpringSecurity 삽질

 
 

JwtAuthenticationFilter 추가 후 WebMvcTest 오류

@WebMvcTest에서 IllegalArgumentException 터지는거 해결
참고
https://stackoverflow.com/questions/62794979/spring-boot-webmvctest-what-is-causing-illegalargumentexception-here
https://csy7792.tistory.com/334
https://velog.io/@cieroyou/WebMvcTest와-Spring-Security-함께-사용하기
 
오류가 발생하는 코드
Failed to load ApplicationContext 이 오류가 터짐
@WebMvcTest(UserController.class) @AutoConfigureRestDocs @MockBean(JpaMetamodelMappingContext.class) @DisplayName("유저 컨트롤러 테스트") class UserControllerTest { @MockBean private UserService userService; @Autowired private MockMvc mockMvc; @Autowired private ObjectMapper objectMapper;
 
해결 방법1
@AutoConfigureMockMvc(addFilters = false) 이 어노테이션을 추가한다.
 
그래도 오류가 난다.
오류 내용
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jwtAuthenticationFilter' defined in file [/Users/hanju/IdeaProjects/Team-10jo-10wonmoa-BE/build/classes/java/main/com/prgrms/tenwonmoa/domain/user/jwt/JwtAuthenticationFilter.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.prgrms.tenwonmoa.domain.user.jwt.TokenProvider' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {} at app//org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) at app//org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229) at app//org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372) at app//org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222) at app//org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582) at app//org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) at app//org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) at app//org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at app//org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) at app//org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) at app//org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) at app//org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391) at app//org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) at app//org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) at app//org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ... 106 more
JwtAuthenticationFilter에서 사용하는 TokenProvider 를 아무래도 못 찾는 것 같다.
 
 
해결
목빈으로 테스트 클래스에 넣어준다.
@MockBean의 역할?
 
@WebMvcTest(UserController.class) @AutoConfigureMockMvc(addFilters = false) @AutoConfigureRestDocs @MockBean(JpaMetamodelMappingContext.class) @DisplayName("유저 컨트롤러 테스트") class UserControllerTest { @MockBean private JwtAuthenticationFilter jwtAuthenticationFilter;
 

추가로 알아보기

@WebMvcTest는 MVC 관련된 설정들만 적용한다고 한다. (참조)
@Controller , @ControllerAdvice , @JsonComponent , Converter/GenericConverter , Filter , WebMvcConfigurer  ,HandlerMethodArgumentResolver beans but not @Component , @Service or @Repository beans
겁나게 많다..
 
내가 만든 JwtAuthenticationFilter → OncePerRequestFilter → GenericeFilterBean → Filter
notion image
Filter여서 찾아온다.
 
하지만 Filter에서 사용하는 빈들은 찾아오지 못하는 것 같다.
notion image