Wondercease

浙ICP备2022017321号

HandlerInterceptor拦截器

最常用的登录拦截、或是权限校验、或是防重复提交

简介

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的自动配置失效

发表评论

您的电子邮箱地址不会被公开。