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

SpringBoot中如何仅为单个指定URL路径配置拦截器

Spring拦截器指定单一路径生效方法

你不需要通过全路径拦截+excludePathPatterns()排除的方式实现单接口拦截,Spring MVC拦截器注册逻辑原生提供了直接指定生效路径的方法:addPathPatterns()。

实现示例

你当前的UserController代码如下:

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

    @PostMapping("/create")
    public Map<String, Object> createAccount(User user) {
        return userService.createAccount(user);
    }

    @PostMapping("/login")
    public Map<String, Object> accountLogin(User user) {
        return userService.accountLogin(user);
    }

    @GetMapping("/activate")
    public Map<String, Object> activateAccount(String confirmationCode) {
        return userService.activateAccount(confirmationCode);
    }

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

编写MVC配置类注册拦截器,仅指定/user/roleChange为生效路径即可:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    // 注入你自定义的权限拦截器实现
    @Resource
    private RoleAuthInterceptor roleAuthInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(roleAuthInterceptor)
                // 仅配置需要拦截的路径,支持多路径、Ant风格通配符
                .addPathPatterns("/user/roleChange");
        // 无需额外调用excludePathPatterns排除其他路径
    }
}

补充说明

  • addPathPatterns()支持传入多个路径参数,比如.addPathPatterns("/user/roleChange", "/admin/**")就可以同时拦截角色变更接口和所有admin前缀接口
  • 两种拦截规则配置的适用场景:
    • 当需要拦截的路径占比少:用addPathPatterns()直接指定,代码更简洁,匹配逻辑更高效
    • 当需要拦截的路径占比多、仅少量路径需要放行:用全路径拦截+excludePathPatterns()排除白名单的写法,减少重复配置

内容的提问来源于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:24:24