You need to enable JavaScript to run this app. Spring Boot配置HttpSecurity无法拦截指定/users/name/端点问题排查
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot配置HttpSecurity无法拦截指定/users/name/端点问题排查

Spring Security 拦截配置失效问题定位

核心失效原因

  • 路径匹配规则完全未命中实际暴露的端点
    Spring Security 的antMatchers匹配逻辑是严格的路径结构匹配,不做模糊推导:
    1. 你的Controller类标注了类级路径@RequestMapping("/users"),对应/name/{user}的方法是路径级定义,也就是说这个接口的实际访问路径结构是 /users/name/{具体参数值}(例如/users/name/test),不存在裸路径 /users/name/ 能正常命中该接口的情况。
    2. 你在配置中写的antMatchers("/users/name/") 是精确匹配末尾带斜杠、斜杠后无任何内容的请求路径,只会对完全等于该字符串的请求生效,根本不会覆盖/users/name/xxx这类带路径参数的实际请求。
  • 配置逻辑和预期完全错位
    你的预期是“拦截/users/name端点(即未认证用户禁止访问)”,但当前配置的规则是:

    路径精确等于/users/name/的请求直接permitAll()(完全放行,无需认证),其余所有请求才要求登录认证。
    这就导致你实际要测试的带参数的接口路径,因为根本没匹配到第一条规则,按逻辑应该落到anyRequest().authenticated()分支触发认证拦截,但因为匹配范围完全不对,整个配置的行为和你预想的完全不一致。
    另外你写的http.antMatcher("/**")属于冗余代码,Spring Security 默认的过滤器拦截范围就是所有请求,这段配置没有实际效果。

可直接复用的修正配置

如果你的目标是拦截所有/users/name/**下的请求,要求必须认证才能访问,不需要对该路径单独配置放行规则,直接调整匹配范围即可:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
        // 如有公开接口需要放行,在此处单独配置
        .antMatchers("/login").permitAll()
        // 通配符匹配所有/users/name下的子路径(含带路径参数的请求),要求认证
        .antMatchers("/users/name/**").authenticated()
        .anyRequest().authenticated()
        .and()
        .httpBasic();
}

如果你的预期反过来——即想让/users/name路径公开放行,需要拦截其余接口,同样需要把匹配规则改成带通配符的形式,否则实际带参数的请求还是无法命中放行逻辑。

靶场场景的额外提示

  • 你在mainUser方法里写的正则是JavaScript语法,直接放在Java的String.matches()方法中不会生效,当前校验逻辑是完全失效的,刚好适配你这个漏洞测试靶场的设计目标;如果后续需要模拟正常的输入校验逻辑,需要把正则改成Java兼容的写法。
  • 你的getMeUSer接口用了GET请求方法,却通过@RequestBody接收参数,GET请求本身不会携带请求体,这个接口在常规调用下就是不可用的状态,符合靶场模拟异常场景的设计要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 23:15:03