使用WebMvcTest+Spring Security返回404?是Bug还是操作有误?
解决方案:Spring Boot 3 + Spring Security 6 WebMvcTest 404问题处理
1. 导入Security配置到测试类
@WebMvcTest默认仅加载控制器相关Bean,不会自动导入Spring Security配置,需手动导入你的Security配置类:
@WebMvcTest(YourController.class) @Import(SecurityConfig.class) // 替换为你的实际Security配置类 class YourControllerTest { // 测试代码 }
2. 正确配置MockMvc的Spring Security支持
在请求中使用Security请求处理器替代@WithMockUser,或构建MockMvc时启用Security支持:
@Autowired private MockMvc mockMvc; @Test void authenticatedRequestShouldReturn200() throws Exception { mockMvc.perform(get("/your-api-path") .with(user("test-user").roles("USER"))) .andExpect(status().isOk()); }
如果使用独立方式构建MockMvc:
@BeforeEach void setUp() { mockMvc = MockMvcBuilders.standaloneSetup(new YourController()) .apply(SecurityMockMvcConfigurers.springSecurity()) .build(); }
3. 确保方法级安全配置生效
若控制器使用@PreAuthorize等方法级权限注解,必须在Security配置类上添加@EnableMethodSecurity:
@Configuration @EnableWebSecurity @EnableMethodSecurity public class SecurityConfig { // 配置HttpSecurity、用户认证等逻辑 }
4. 排查请求路径匹配问题
出现404时,打印请求详情验证路径是否匹配控制器注解:
mockMvc.perform(get("/your-api-path") .with(user("test-user"))) .andDo(print()) // 打印请求和响应详情 .andExpect(status().isOk());
内容的提问来源于stack exchange,提问作者Mark Nelson
相关产品推荐
相关产品推荐

