Java权限拦截器核心是实现HandlerInterceptor接口,在preHandle中校验用户身份、路径与权限匹配,不通过则返回false并设403;需通过WebMvcConfigurer注册,排除登录等路径,并注意静态资源、CORS及拦截顺序。

Java中实现简单权限拦截器,核心在于利用Spring MVC的HandlerInterceptor接口,在请求处理前后插入权限校验逻辑。不需要复杂配置,关键是要理清拦截时机、校验依据和拒绝策略。
权限拦截器的基本结构
一个典型的权限拦截器需实现HandlerInterceptor接口,重点关注preHandle方法——它在Controller方法执行前被调用,返回false可中断请求流程。
- 继承HandlerInterceptor或直接实现接口
- preHandle中获取当前用户身份(如从Session或Token解析)
- 根据请求路径(request.getRequestURI())和用户角色/权限列表比对
- 校验不通过时,设置响应状态码(如403)并写入提示信息,返回false
如何绑定拦截器到指定路径
拦截器不会自动生效,需在配置类中显式注册。Spring Boot推荐使用WebMvcConfigurer方式,避免重写默认配置。
- 创建配置类,实现WebMvcConfigurer
- 重写addInterceptors方法
- 用registry.addInterceptor(新实例)注册拦截器
- 调用excludePathPatterns放行登录、静态资源等无需鉴权的路径
- 用includePathPatterns或pathMatcher精准匹配需要拦截的API(如"/api/**")
权限判断的常见实现方式
权限校验本身不依赖框架,关键是数据来源和匹配逻辑是否清晰、可维护。
立即学习“Java免费学习笔记(深入)”;
- 基于角色:检查用户是否拥有ROLE_ADMIN等预设角色,适合粗粒度控制
- 基于权限字符串:如"user:delete"、"order:query",与请求路径或方法名映射后比对
- 注解驱动:在Controller方法上加自定义注解(如@RequirePermission("sys:log:list")),拦截器中通过反射读取并校验
- 避免硬编码权限字符串,建议统一定义为public static final String常量或枚举
注意点与易错细节
拦截器看似简单,但几个细节处理不好会导致权限失效或误拦。
- 静态资源(CSS/JS/图片)默认不走拦截器,但如果用了/**通配且未排除,可能引发404或重复鉴权
- 异步请求(如AJAX)、跨域请求(CORS预检)需确认拦截器是否覆盖OPTIONS方法,否则预检失败
- 登录态丢失或Token过期时,拦截器应跳转登录页或返回标准错误JSON,而非抛异常
- 多个拦截器存在顺序问题,用order控制执行优先级,权限拦截器通常需靠前执行










