写在前面:
记录自己的SpringMVC学习之旅,若看不懂则建议先看前几篇博客,详细代码可在我的Gitee仓库ssm-learning克隆下载学习使用!
2.5 SpringMVC拦截器
2.5.1 Spring MVC拦截器的作用
拦截器(Interceptor)类似于Servlet中的过滤器Filter,用于对处理器进行预处理和后处理。
将拦截器按一定顺序连接成一条链,这条链称为拦截器链(Interceptor Chain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用,这也是AOP思想的体现。
2.5.2 拦截器与过滤器的区别
区别 | 使用范围 | 配置 | 拦截范围 |
---|---|---|---|
过滤器Filter | 是Servlet规范一种,可在任何Java Web项目使用 | 在web.xml文件中的url-pattern 中配置/* |
只有在配置后才对所有访问资源拦截 |
拦截器Interceptor | 属于SpringMVC独有的,只可在使用其框架时使用 | 在SpringMVC.xml文件中配置mvc:mapping path=" "/> |
在配置之后才可对所有资源进行拦截,但可通过<mvc:exculde-mapping path=""/> 标签排除不需要拦截部分 |
2.5.3 拦截器方法
拦截器都是自定义的,但都要实现接口HandlerInterceptor,一般需要重写三个方法,即:
- preHandle().目标方法执行前执行它,返回值为布尔类型,为false则不执行后面所有方法,一般用于判断访问时是否拥有许可证,防止恶意访问
- postHandle().目标方法执行后执行,DispatcherServlet进行视图处理前执行,可对视图对象进行修改操作并返回
- afterCompletion().整个拦截方法执行后执行,也就是DispatcherServlet进行视图处理后执行
注意:这三个方法都是AOP原理的具体体现,目标方法为切点,controller中方法为切面
执行流程: