Spring中的拦截器的作用
Spring中的拦截器的作用
SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。
用户可以自己定义一些拦截器来实现特定的功能。
谈到拦截器,还要向大脚提一个词–拦截器链(Interceptor Chain)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。
说到这里,那么拦截器与过滤器具体的区别是什么:
过滤器: 是servlet规范中的一部分,任何java web工程都可以使用。
拦截器: 是SpringMVC框架自己的,只使用了SpringMVC框架的工程才能用。
过滤器: 在url-pattern中配置了/*之后,可以对所有要访问的资源拦截。
拦截器: 他是只会拦截访问的控制器方法,如果访问的是jsp,html,css,image或者js是不会进行拦截的。
它也是AOP思想的具体应用。
我们要向自定义拦截器,要求必须实现:HandlerInterceptor接口。
步骤:
第一步: 编写一个普通的类实现HandlerInterceptor接口
package cn.itcast.Interceptor;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class MyInterceptor1 implements HandlerInterceptor {/** 预处理,controller方法执行前* return true放行,执行下一个拦截器,如果没有拦截器,执行controller中的方法* return false不放行,** */public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println("MyInterceptor执行了。。。前处理方法2222");// request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);return true;}/** 后处理的方法,Controller方法执行后,在success执行之前* */public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("MyInterceptor执行了。。。后处理方法2222");}/** success.jsp方法执行后,该方法会执行* */public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("MyInterceptor执行了。。。最后处理2222");}
}
第二步: 在前端控制器,springmvc…xml中配置拦截器
<!--配置拦截器--><mvc:interceptors><!--配置拦截器--><mvc:interceptor><!--要拦截的方法--><mvc:mapping path="/user/**"/><!--不要拦截的方法<mvc:exclude-mapping path=""/>--><!--配置拦截器对象--><bean class="cn.itcast.Interceptor.MyInterceptor"/></mvc:interceptor><mvc:annotation-driven />
拦截器中的方法说明
public interface HandlerInterceptor { /** * 如何调用: * 按拦截器定义顺序调用 * 何时调用: * 只要配置了都会调用 * 有什么用: * 如果程序员决定该拦截器对请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去 * 进行处理,则返回 true。 * 如果程序员决定不需要再调用其他的组件去处理请求,则返回 false。 */ default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception { return true; } /** * 如何调用: * 按拦截器定义逆序调用 * 何时调用: * 在拦截器链内所有拦截器返成功调用 * 有什么用: * 在业务处理器处理完请求后,但是 DispatcherServlet 向客户端返回响应前被调用, * 在该方法中对用户请求 request 进行处理。 */ default void postHandle(HttpServletRequest request, HttpServletResponse
response, Object handler,@Nullable ModelAndView modelAndView) throws Exception { } /** * 如何调用: * 按拦截器定义逆序调用 * 何时调用: * 只有 preHandle 返回 true 才调用 * 有什么用: * 在 DispatcherServlet 完全处理完请求后被调用, * 可以在该方法中进行一些资源清理的操作。 */ default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {}
}
思考:
如果有多个拦截器,这时拦截器 1 的 preHandle 方法返回 true,但是拦截器 2 的 preHandle 方法返 回 false,而此时拦截器 1 的 afterCompletion 方法是否执行?
拦截器的作用路径
作用路径可以通过在配置文件中配置。
<!-- 配置拦截器的作用范围 -->
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**" /><!-- 用于指定对拦截的 url --> <mvc:exclude-mapping path=""/><!-- 用于指定排除的 url--> <bean id="handlerInterceptorDemo1" class="com.itheima.web.interceptor.HandlerInterceptorDemo1"></bean> </mvc:interceptor>
</mvc:interceptors>
多个拦截器的执行顺序
Spring中的拦截器的作用相关推荐
- (转)spring中的拦截器(HandlerInterceptor+MethodInterceptor)
1. 过滤器跟拦截器的区别 在说拦截器之前,不得不说一下过滤器,有时候往往被这两个词搞的头大. 其实我们最先接触的就是过滤器,还记得web.xml中配置的<filter>吗~ 你应该知道 ...
- 谈谈spring中的拦截器interceptor
谈谈spring中的拦截器 在web开发中,拦截器是经常用到的功能.它可以帮我们验证是否登陆.预先设置数据以及统计方法的执行效率等等.今天就来详细的谈一下spring中的拦截器.spring中拦截器主 ...
- Spring中的拦截器
1.Spring中的拦截器 在web开发中,拦截器是经常用到的功能.它可以帮我们预先设置数据以及统计方法的执行效率等等. 今天就来详细的谈一下spring中的拦截器.spring中拦截器主要分两种,一 ...
- spring mvc中的拦截器
本文说下spring MVC中的拦截器 文章目录 拦截器介绍 拦截器注入适配器 自定义拦截器 controller测试 测试结果 本文小结 拦截器介绍 拦截器是在servlet执行之前执行的程序(这里 ...
- SpringMVC中的拦截器
SpringMVC中的拦截器 拦截器的作用 Spring MVC 的处理器拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理. 用户可以自己定义一些拦截器来实现 ...
- 框架:SpringMVC中Interceptor拦截器的两种实现
Spring中使用Interceptor拦截器 SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证, ...
- 框架:Spring Aop、拦截器、过滤器的区别
Spring Aop.拦截器.过滤器的区别 Filter过滤器:拦截web访问的url地址. Interceptor拦截器:拦截以.action结尾的url,拦截Action的访问. Spring A ...
- vue面向切面_vue:在路由跳转中使用拦截器
1:首先在路由对象中的某一个具体的路由对象加这样一个属性 meta: { requireAuth:true } 2:然后在main.js中添加这段代码 router.beforeEach((to, ...
- springboot中的拦截器interceptor和过滤器filter,多次获取request参数
大家好,我是烤鸭: 这是一篇关于springboot的拦截器(interceptor)和过滤器(Filter). 先说一下过滤器和拦截器. 区别: 1. servlet请求,顺序:Filter ...
最新文章
- ansible所有模块一览
- C语言中动态数组的作用,C语言实现动态数组
- 剑指offer:输入一棵二叉树,判断该二叉树是否是平衡二叉树。
- WPF获取鼠标相对于屏幕的绝对位置
- dockerfile构建nginx并结合php
- BZOJ2209 [Jsoi2011]括号序列 splay
- 编译安装http启动问题
- python基础操作---string
- shell脚本学习指南——好书推荐
- \t\t超星pdg转PDF文档之虚拟打印法
- 数据结构——线段树学习笔记
- 2021年中国兽医热疗室市场趋势报告、技术动态创新及2027年市场预测
- Batch Normalization :深度网络中的BN层
- 做了个小程序,拿到天使轮投资了!
- 恭喜!公积金将按月提取!12月31日前,全面执行!
- python中文相似度_python文本相似度计算
- 制造企业生产管理创新理念
- 从“汽转球”、“差分机”到“机巧伊武”——蒸汽朋克补完计划
- ASP.NETCoreWeb教程一:创建和理解Web应用程序,细致入微
- c# http put请求 通用http请求 post get put
热门文章
- Java使用SQLServerBulkCopy实现数据库批量操作
- 微信小程序开发11 数据预取:合理缓存提高用户体验
- redhat 5.5 开启telnet 及解决防火墙、乱码问题
- ResultMap总结
- kali搭建php环境
- 【附源码】Python计算机毕业设计甜心驿站饮品信息管理
- js字符串截取为数组
- 今日还有1款红包封面可以领了,记得定闹钟!
- 三星s20可以更新android11吗,三星GalaxyS20FE通过一个UI 3.0获得Android 11更新
- android typeface设置字体,Android中通过typeface设置字体