You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:03:10