一、拦截器简介

1.概念

        拦截器Interceptor是一种动态拦截方法调用的机制,在SpringMVC中动态拦截controller方法的执行。

2.作用

(1)在指定的方法调用前后执行预设的代码
(2)阻止原始方法的执行

3.拦截器与过滤器(Filter)的区别


Interceptor
Filter
归属不同 SpringMVC技术 Servlet技术
拦截的内容不同 仅针对SpringMVC的访问进行增强 对所有的访问进行增强

 二、拦截器的使用

1.创建拦截器类

        因为在SpringMVC中拦截器用来拦截controller的方法,所以把拦截器类创建在controller包下。

(1)创建拦截器类,实现HandlerInterceptor接口
(2)重写三个方法
(3)将拦截器类设为Bean,交由Spring管理

        

2.设置拦截内容

(1)定义配置类,继承WebMvcConfigurationSupport,重写addInterceptors()方法
        与放行静态资源的配置类似。
(2)添加拦截器并设置要拦截的请求访问路径
        可设置多个要拦截的路径。
        

3.★设置拦截内容的简化开发(推荐)

        直接在SpringMvcConfig中设置拦截内容:将SpringMvcConfig实现WebMvcConfigurer,重写addInterceptor()方法。
        

三、拦截器的执行流程

        

四、拦截器三种拦截方法的参数

        

(1)request和response参数

        可以通过"参数."对里面的数据进行操作,如取数据等:
        

(2)handler参数

        该参数封装了原始执行方法的信息,如原始方法名等。

(3)modelAndView

        该参数封装了SpringMVC进行页面跳转的相关数据。

(4)ex

        该参数封装了原始方法的异常信息。

五、拦截器链的执行顺序

        
1.若所有拦截器中的preHandle()都return true,则执行顺序同过滤器链;
2.当出现对原始方法的拦截即return false时,则其后的拦截器的preHandle()均终止运行,所有拦截器的postHandle()都不会运行,只运行其前的拦截器的afterCompletion()。