一、拦截器简介
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()。