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

Spring Boot Starter Security排除/api路径失效,请求返回401问题问询

问题原因分析与解决方案

嘿,我来帮你拆解下这个问题的根源,以及怎么解决它:

核心问题:路径匹配规则写错了

你当前配置的web.ignoring().antMatchers("/api*")并没有覆盖所有你想忽略的路径。Spring Security使用的Ant风格路径匹配规则里,*只能匹配任意非斜杠的字符,也就是说:

  • 它能匹配/api、/apia这类路径,但无法匹配/api/、/api/users这类包含斜杠的子路径。

如果你的RestController接口是/api/xxx格式,或者Spring MVC自动把/api重定向到/api/(比如控制器上的@RequestMapping是/api/),这些路径就不会被/api*匹配到,进而触发Spring Security的默认安全规则——要求所有请求必须认证,所以返回了401。

另外,你没有重写configure(HttpSecurity http)方法,此时Spring Security会启用默认配置:所有请求都需要认证。如果你的路径没被web.ignoring()正确匹配,就会被这个默认规则拦截。

解决方案

1. 修正路径匹配规则

把/api*改成/api/**,这样就能匹配所有以/api开头的路径(包括/api、/api/、/api/xxx等):

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/api/**");
}

2. 补充完整的HttpSecurity配置(可选但推荐)

为了避免默认规则的干扰,建议重写configure(HttpSecurity http)方法,明确指定非/api路径需要认证,/api路径允许匿名访问:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
            .antMatchers("/api/**").permitAll() // 允许/api下所有路径匿名访问
            .anyRequest().authenticated() // 其他所有路径需要认证
        .and()
            .formLogin() // 启用表单登录(如果需要的话)
            .and()
            .httpBasic(); // 启用HTTP Basic认证,对应你配置的内存用户
}

小提示:web.ignoring()是让路径完全绕过Spring Security的过滤器链,性能更优;而permitAll()是让路径经过过滤器链但允许匿名访问。如果你的/api路径不需要任何安全处理(比如CSRF防护),优先用web.ignoring()。

验证修改

修改配置后,重新运行你的测试方法:

@Test
public void testStatus200() throws Exception{
    mvc.perform(get("/api")).andExpect(status().isOk());
}

此时应该能正常返回200状态码了。

内容的提问来源于stack exchange,提问作者Alex Foglia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:52:44