引言
SpringMVC 的拦截器特性类似于过滤器,用于页面控制器/处理器进行的预处理和后处理
拦截器的使用步骤
自定义拦截器类
package com.dt.interceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author Binge
* @desc 拦截器类
* @date 2020/10/15 上午11:28
*/
public class MyInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("拦截点1");
return true; //返回值 true:请求通过 false:请求被拦截
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("拦截点2");
super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("拦截点3");
super.afterCompletion(request, response, handler, ex);
}
}
以上代码可以看到,定义一个拦截器类有三个拦截方法(拦截点),其中 preHandle 拦截方法与其他两个有一点不同,就是这个方法有返回值,可以提前将请求拦截,让页面控制器无法收到请求。
SpringMVC 添加拦截器配置
<mvc:interceptors>
<mvc:interceptor>
<!--配置拦截器拦截的请求路径-->
<mvc:mapping path="/comment"/>
<!--配置拦截器类的路径-->
<bean class="com.dt.interceptor.MyInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
以上配置中,path 属性用于设置拦截器可以拦截的请求,而且支持 /* 通配符,表示拦截所有请求。
拦截器的使用场景
-
日志记录
记录请求信息的日志,以便进行信息监控、信息统计以及页面浏览次数等
-
权限管理
检测登录权限,如果没有登录直接返回到登录或注册页面
-
性能监控
可以通过拦截器在进入页面控制器之前记录开始时间,在处理完记录结束时间,从而得到该请求的处理时长
-
加/解密码
可以通过拦截器对密码进行加/解密