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

SpringBoot拦截器excludePathPatterns排除路径失效仍拦截请求

问题场景

编写的UserController代码如下:

@RestController
@RequestMapping("/user")
public class UserController {
    @Resource
    UserService userService;

    @PostMapping("/roleChange")
    public Map<String, Object> setUserRole(String uuid, String email, String roleId){
        return userService.setUserRole(uuid, email, roleId);
    }
}

拦截器注册配置如下:

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new AuthInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/user/login","/user/role-control");
    }
}

配置中已经在excludePathPatterns里添加了/user/role-control的排除规则,但实际请求对应路径时依然被拦截器拦截。

故障原因

拦截器排除规则配置的路径和接口实际映射的路径不匹配:

  • 类级别@RequestMapping("/user")加方法级别@PostMapping("/roleChange")拼接后,接口的真实访问路径是/user/roleChange
  • 排除规则里写的路径是/user/role-control,二者路径名不一致:一个是驼峰格式的roleChange,一个是中划线分隔的role-control,无法命中排除逻辑。

Spring MVC的拦截器路径匹配不会自动做命名格式转换,必须和接口声明的映射路径完全一致才会生效。

修复方法

将拦截器配置中的排除路径修改为和实际接口路径一致即可,修正后的配置:

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new AuthInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/user/login","/user/roleChange");
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:27:20