SpringBoot之HandlerInterceptor拦截器的使用
定义实现类
定义一个Interceptor非常简单方式也有几种,简单列举两种:
- 类要实现Spring的HandlerInterceptor接口
- 类继承实现了HandlerInterceptor接口的类,例如 已经提供的实现了HandlerInterceptor接口的抽象类HandlerInterceptorAdapter
这里使用的是第二种方法继承HandlerInterceptorAdapter
方法介绍
1 | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { |
- preHandle: 在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理;
- postHandle: 在业务处理器处理请求执行完成后,生成视图之前执行。后处理(调用Service并返回ModelAndView,但未进行页面渲染), 有机会修改ModelAndView;
- afterCompletion: 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面)
拦截器实现
- TestFilter
1 | package com.kenyang.filter; |
- 新建WebAppConfigurer实现WebMvcConfigurer接口
其实以前都是继承WebMvcConfiguerAdapter类 不过SpringBoot 2.0 以上
WebMvcConfigurerAdapter方法过时,有两种替代方案:
- 继承WebMvcConfigurationSupport
- 实现WebMvcConfigurer
但是继承WebMvcConfigurationSupport会让Spring-boot对mvc的自动配置失效。根据项目情况选择。现在大多数项目是前后端分离的,并没有对静态资源有自动配置的需求,所以继承WebMvcConfigurationSupport也未尝不可
1 | public class WebAppConfigurer implements WebMvcConfigurer { |
其实下面还有很多方法我这里就省略了,过滤器可以添加多个,可以指定Path,这里的/**是对所有的请求都做拦截