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
相关产品推荐
相关产品推荐

