拦截器从功能的角度来讲和过滤器(Filter)类似,但有本质区别
FIlter是Servlet规范的一部分,能够拦截任意请求,常用于设置编码、登录验证等。
拦截器属于SpringMVC规范的一部分,只能拦截DIspatcherServlet拦截到的内容,一般拦截Controller,所以经常用于抽取公共代码。
使用方式
自定义拦截器实现HandlerInterceptor接口
import org.springframework.lang.Nullable;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class MyInterceptor implements HandlerInterceptor {/*** 请求预处理,用于初始化操作* 如果返回false:不再调用控制器的方法以及后面的postHandle、afterCompletion方法*/public boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throws Exception {System.out.println("preHandle-------");return true;}/*** Controller方法调用之后调用,在DispatcherServlet渲染视图之前调用* 在这里对请求进行后续处理,比如设置请求头、使用modelAndView改变转发路径等*/public void postHandle(HttpServletRequest request,HttpServletResponse response,Object handler,@Nullable ModelAndView modelAndView) throws Exception {System.out.println("postHandle-------");}/*** 在DispatcherServlet渲染视图之后调用* 可以理解在response.getWriter().write()后调用或者在request.getRequestDispatcher().forward()转发* 后调用再或者在response.sendRedirect()重定向之后调用*/public void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler, @Nullable Exception ex) throws Exception {System.out.println("afterCompletion-------");}}
配置拦截器
<mvc:interceptors><!-- 可以配置多个拦截器--><mvc:interceptor><!-- 需要拦截的路径,包括子路径--><mvc:mapping path="/**"/><!-- 排查所有的html--><mvc:exclude-mapping path="/**/*.html"/><!-- 排查所有的png--><mvc:exclude-mapping path="/**/*.png"/><!-- 排查所有的jpg--><mvc:exclude-mapping path="/**/*.jpg"/><!-- 排查所有的js--><mvc:exclude-mapping path="/**/*.js"/><!-- 自定义的拦截器--><bean class="com.lff.MyInterceptor" /></mvc:interceptor></mvc:interceptors>
这样就OK啦
