最常用的登录拦截、或是权限校验、或是防重复提交
简介
SpringWebMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于处理器进行预处理和后处理。
应用场景
日志记录,可以记录请求信息的日志,以便进行信息监控、信息统计等。
权限检查:如登陆检测,进入处理器检测是否登陆,如果没有直接返回到登陆页面。
性能监控:典型的是慢日志。
HandlerInterceptor定义实现类
定义一个Interceptor 非常简单,方式也有几种,我这里简单列举两种:
类要实现Spring 的HandlerInterceptor 接口;
类继承实现了HandlerInterceptor 接口的类,例如:已经提供的实现了HandlerInterceptor 接口的抽象类HandlerInterceptorAdapter。
HandlerInterceptor方法介绍
preHandle:在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理;
postHandle:在业务处理器处理请求执行完成后,生成视图之前执行。后处理(调用了Service并返回ModelAndView,但未进行页面渲染),有机会修改ModelAndView (这个博主就基本不怎么用了);
afterCompletion:在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面);
拦截器实现
public class TestFilter extends HandlerInterceptorAdapter{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
}
新建WebAppConfigurer:实现WebMvcConfigurer接口,拦截请求
@Configuration
public class WebAppConfigurer implements WebMvcConfigurer
@Override
publicvoidaddInterceptors(InterceptorRegistry registry){
// 可添加多个,/**是对所有的请求都做拦截
registry.addInterceptor(newTestFilter())
.addPathPatterns(“/**”)
.excludePathPatterns(“/login”,”/register”);
}
关于请求的处理,有两个常用方法:
.addPathPatterns():增加url的拦截路径,“/**”意思是所有请求都要拦截;
.excludePathPatterns():排除url的拦截路径,如:”/login”, “/register”意为登录和注册不做拦截;
其实以前都是继承WebMvcConfigurerAdapter类,不过springBoot2.0以上 WebMvcConfigurerAdapter 方法过时,有两种替代方案:
继承 WebMvcConfigurationSupport 类;
实现 WebMvcConfigurer 接口;
但是,继承WebMvcConfigurationSupport会让Spring-boot对mvc的自动配置失效