定义

Spring Web MVC 的处理器拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。

第一步:拦截器的定义

定义一个实现HandlerInterceptor接口的类:

package com.huihui.handlerIntercepter;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;public class HandlerIntercepter1 implements HandlerInterceptor{//进入handler方法之前执行//应用场景:用于身份认证和身份授权//比如身份认证:如果认证不通过表示当前用户没有登陆,需要此方法拦截不再继续往下执行@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object obj) throws Exception {return true;}//进入handler方法之后并且在返回modelAndView之前执行//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response,Object obj, ModelAndView modelAndView) throws Exception {}//执行完成handler之后执行//应用场景:统一异常处理,统一日志处理@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object obj, Exception e)throws Exception {}
}

第二步:拦截器配置

在springmvc.xml文件中配置拦截器。

第一种:针对某种mapping配置拦截器(比较少用)

<beanclass="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"><property name="interceptors"><list><ref bean="handlerInterceptor1"/><ref bean="handlerInterceptor2"/></list></property>
</bean><bean id="handlerInterceptor1" class="springmvc.intercapter.HandlerInterceptor1"/><bean id="handlerInterceptor2" class="springmvc.intercapter.HandlerInterceptor2"/>

第二种:针对所有mapping配置全局拦截器(常用)

<!--拦截器 -->
<mvc:interceptors><!--多个拦截器,顺序执行 --><mvc:interceptor><!-- /**会拦截所有的url(包括url的子路径)/* 会拦截所有的url(不包括url的子路径)--><mvc:mapping path="/**"/><bean class="com.huihui.handlerIntercepter.HandlerIntercepter1"></bean></mvc:interceptor><mvc:interceptor><mvc:mapping path="/**"/><bean class="com.huihui.handlerIntercepter.HandlerIntercepter2"></bean></mvc:interceptor>
</mvc:interceptors>

第三步:测试拦截器

第一种测试:两个拦截器都放行

也就是将两个拦截器中的preHandle方法最后都return true。
运行流程:

总结:
preHandle方法按拦截器配置的顺序执行,postHandle和afterCompletion方法按拦截器配置的逆向顺序执行。

第二种测试:拦截器1放行,拦截器2不放行

也就是将拦截器1的preHandle方法return true,拦截器2的preHandle方法return false。

运行流程:

总结:
拦截器1放行,拦截器2 preHandle才会执行。
拦截器2 preHandle不放行,拦截器2 postHandle和afterCompletion不会执行。
只要有一个拦截器不放行,postHandle不会执行。

第三种测试:拦截器1和拦截器2都不放行

也就是将拦截器1和拦截器2的preHandle方法都return false。

运行流程:

总结:
拦截器1 preHandle不放行,postHandle和afterCompletion不会执行。
拦截器1 preHandle不放行,拦截器2不执行。

拦截器---SpringMVC学习笔记(十四)相关推荐

  1. 吴恩达《机器学习》学习笔记十四——应用机器学习的建议实现一个机器学习模型的改进

    吴恩达<机器学习>学习笔记十四--应用机器学习的建议实现一个机器学习模型的改进 一.任务介绍 二.代码实现 1.准备数据 2.代价函数 3.梯度计算 4.带有正则化的代价函数和梯度计算 5 ...

  2. Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理

    Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理 Polyworks的工作任务存储分为工作区和项目两级,通过WORKSPACE命令获取工作任务信息,实现更好的任务管理. 下 ...

  3. struts2拦截器_Struts2 学习笔记(二)

    1. Struts2的Servlet API的访问 在使用Struts2的框架的过程中,发现Struts2和Servlet的API是解耦合的.在实际开发中,经常使用到Servlet的API,比如进行登 ...

  4. NDK学习笔记(十四) 使用AVILib+window创建一个AVI视频播放器

    文章目录 1.window api 2.主要代码 3.实现效果 1.window api (1)从surface对象中检索原生window 从surface中检索对象window ANativeWin ...

  5. 跟踪源码运行流程---SpringMVC学习笔记(四)

    通过前端控制器源码分析springmvc的执行过程 第一步:前端控制器接收请求 调用doDiapatch 第二步:前端控制器调用处理器映射器查找 Handler 第三步:调用处理器适配器执行Handl ...

  6. 【theano-windows】学习笔记十四——堆叠去噪自编码器

    前言 前面已经学习了softmax,多层感知器,CNN,AE,dAE,接下来可以仿照多层感知器的方法去堆叠自编码器 国际惯例,参考文献: Stacked Denoising Autoencoders ...

  7. 【神经网络】学习笔记十四——Seq2Seq模型

    本文简要介绍seq2seq,即序列到序列的基本知识,是深度学习和NLP中一个重要的知识. 从三部分来说,seq2seq基本简介,应用场景和原理解析. 一.什么是Seq2Seq 所谓Seq2Seq(Se ...

  8. 重新认识错过(通向财富自由之路学习笔记十四)

    本周学习<通向财富自由之路>专栏重新认识错过的文章,在文章中作者介绍了自己是如何错过一次升级的.对于这种错过,非常有同感.比如在中学时候,需要学习生物.历史.地理等学科,而这些学科不需要计 ...

  9. Mr.J-- jQuery学习笔记(十四)--动画显示隐藏

    eq()函数 定义和用法 :eq() 选择器选取带有指定 index 值的元素. index 值从 0 开始,所有第一个元素的 index 值是 0(不是 1). 经常与其他元素/选择器一起使用,来选 ...

最新文章

  1. Mybatis源码阅读之三
  2. 干货回顾丨机器学习笔记-----AP(affinity propagat)算法讲解及matlab实现
  3. java 继承类 变量、静态变量、构造函数执行顺序
  4. 系统管理-第1部分 系统的易管理性
  5. Nature:科学家首次实现肉眼可见的量子纠缠
  6. Shell中I/O重定向的用法笔记
  7. android 5.1 壁纸路径,RTFSC – Android5.1 壁纸设置流程简析 – RustFisher
  8. kettle预览点两下才出数_谁才是娱乐圈油腻王中王?
  9. Pandas读取excel中的数据,并利用现有列数据生成新列
  10. Flutter之Redux框架原理解析
  11. java面试简历精通n_Java简历与面试
  12. html+css+javascript+jquery+bootstarp响应式旅行社旅游平台网站模板(14页)
  13. python不是5的倍数_python – 低于1000的3或5的所有倍数的总和
  14. 华为篇-嵌入式公司待遇盘点-第二期
  15. 防水穿墙套管在建筑外墙管道需设置柔性连接
  16. Oreilly的历史和公司概况
  17. 什么是软件EV代码签名证书
  18. 传感器技术—新型光电传感器(学习笔记十 补充)
  19. 如何根据历史数据监控当前数据是否异常
  20. 卡耐基:一个人的成功,只有15%是靠专业技术

热门文章

  1. (一)导学(前端框架面试-聚焦Vue/React/Webpack)
  2. 2021高考成绩查询省排名,重磅!2021全国各地高考预测分数线出炉,这样估分可以估算全省排名...
  3. 使用countup.js使数字动态叠加
  4. generator 中 调用另一个 generator
  5. for of 和 for in 在数组和对象中的区别
  6. position的四种属性
  7. OpenCV:使用OpenCV3随机森林进行统计特征多类分析
  8. Allegro PCB Design GXL (legacy) 由零散的对象构成一个Shape
  9. Oracle11gR2在9x8hk..Windows18669144449 命名进入Oracle
  10. 使用commons httpclient请求https协议的webservice