一、HandlerInterceptor是什么?
Spring Boot 拦截器主要应用于登陆校验、权限验证、乱码解决,同样提供了拦截器功能。
二、使用方式
在项目中实现HandlerInterceptor接口开箱即用
三、HandlerInterceptor 中实现的方法
| 方法 | 介绍 |
|---|---|
| preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) | 该方法在控制器处理请求方法前执行,其返回值表示是否中断后续操作,返回 true 表示继续向下执行,返回 false 表示中断后续操作。(返回true,false) |
| postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) | 该方法在控制器处理请求方法调用之后、解析视图之前执行,可以通过此方法对请求域中的模型和视图做进一步修改。 (无返回值) |
| afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) | 该方法在视图渲染结束后执行,可以通过此方法实现资源清理、记录日志信息等工作。(无返回值) |
四、程序中使用
@Component
public class MenuUnauthorizedInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpSession session = request.getSession();Object roleid = session.getAttribute("roleid");String requestURI = request.getRequestURI();if (roleid != null) {ArrayList data = (ArrayList
五、拦截程序中接口,进入HandlerInterceptor实现类
@Configuration
public class MenuUnauthorizedConfig implements WebMvcConfigurer {@AutowiredMenuUnauthorizedInterceptor menuUnauthorizedInterceptor;/*** 添加Web项目的拦截器*/@Overridepublic void addInterceptors(InterceptorRegistry registry) {// 对所有访问路径,都通过MenuUnauthorizedInterceptor类型的拦截器进行拦截registry.addInterceptor(new MenuUnauthorizedInterceptor()).addPathPatterns("/**").excludePathPatterns("/login").excludePathPatterns("/index").excludePathPatterns("/logout").excludePathPatterns("/img/**").excludePathPatterns("/images/**").excludePathPatterns("/resources/**").excludePathPatterns("/business/**").excludePathPatterns("/static/", "/css/", "/image/", "/js/", // 过滤不验证的路径"/scaptcha","/loadmain","/sysmenu/query/by/currentuser","/page/loadmain","/page/sysrole","/api/**","/relation/partner/api/query/by/partnerid/******","/relation/role/menu/query/by/roleid/******","/page/sysrole/**","/page/**","/syspartner/**","/assets/css/***", "/assets/font/***","/assets/js/css/modules/laydate/default/******","/assets/js/css/modules/layer/default/******","/assets/js/css/modules/****","/assets/img/***", "/assets/js/***","/assets/service/***", "/css/**","/css/partner/***", "/frame/**","/frame/css/***", "/frame/img/***","/frame/js/***", "/frame/less/***","/frame/plugin/***", "/js/**");}
}
在WebMvcConfigurer 方法中可以指定拦截规则
1、addPathPatterns:该方法用于指定拦截路径,例如拦截路径为“/**”,表示拦截所有请求,包括对静态资源的请求。
2、excludePathPatterns:该方法用于排除拦截路径,即指定不需要被拦截器拦截的请求。
六、拦截失败的原因
1、在拦截过程中如果发现过滤某些接口不走当前拦截器,发现不生效,原因如下

1.配置拦截器时,如果excludePathPatterns没有生效,可能是url配置有问题。
2.可以检查下application.yml或者application-dev.properties的context-path,或者其它类似的地方,配置拦截器的url不应该包含这些路径,只要从Controller的路径开始配置即可。
上一篇:gateway中的限流与熔断
下一篇:量子计算(十):量子计算原理