拦截器---SpringMVC学习笔记(十四)
定义
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.准备数据 2.代价函数 3.梯度计算 4.带有正则化的代价函数和梯度计算 5 ...
- Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理
Polyworks脚本开发学习笔记(十四)-WORKSPACE信息读取及管理 Polyworks的工作任务存储分为工作区和项目两级,通过WORKSPACE命令获取工作任务信息,实现更好的任务管理. 下 ...
- struts2拦截器_Struts2 学习笔记(二)
1. Struts2的Servlet API的访问 在使用Struts2的框架的过程中,发现Struts2和Servlet的API是解耦合的.在实际开发中,经常使用到Servlet的API,比如进行登 ...
- NDK学习笔记(十四) 使用AVILib+window创建一个AVI视频播放器
文章目录 1.window api 2.主要代码 3.实现效果 1.window api (1)从surface对象中检索原生window 从surface中检索对象window ANativeWin ...
- 跟踪源码运行流程---SpringMVC学习笔记(四)
通过前端控制器源码分析springmvc的执行过程 第一步:前端控制器接收请求 调用doDiapatch 第二步:前端控制器调用处理器映射器查找 Handler 第三步:调用处理器适配器执行Handl ...
- 【theano-windows】学习笔记十四——堆叠去噪自编码器
前言 前面已经学习了softmax,多层感知器,CNN,AE,dAE,接下来可以仿照多层感知器的方法去堆叠自编码器 国际惯例,参考文献: Stacked Denoising Autoencoders ...
- 【神经网络】学习笔记十四——Seq2Seq模型
本文简要介绍seq2seq,即序列到序列的基本知识,是深度学习和NLP中一个重要的知识. 从三部分来说,seq2seq基本简介,应用场景和原理解析. 一.什么是Seq2Seq 所谓Seq2Seq(Se ...
- 重新认识错过(通向财富自由之路学习笔记十四)
本周学习<通向财富自由之路>专栏重新认识错过的文章,在文章中作者介绍了自己是如何错过一次升级的.对于这种错过,非常有同感.比如在中学时候,需要学习生物.历史.地理等学科,而这些学科不需要计 ...
- Mr.J-- jQuery学习笔记(十四)--动画显示隐藏
eq()函数 定义和用法 :eq() 选择器选取带有指定 index 值的元素. index 值从 0 开始,所有第一个元素的 index 值是 0(不是 1). 经常与其他元素/选择器一起使用,来选 ...
最新文章
- Mybatis源码阅读之三
- 干货回顾丨机器学习笔记-----AP(affinity propagat)算法讲解及matlab实现
- java 继承类 变量、静态变量、构造函数执行顺序
- 系统管理-第1部分 系统的易管理性
- Nature:科学家首次实现肉眼可见的量子纠缠
- Shell中I/O重定向的用法笔记
- android 5.1 壁纸路径,RTFSC – Android5.1 壁纸设置流程简析 – RustFisher
- kettle预览点两下才出数_谁才是娱乐圈油腻王中王?
- Pandas读取excel中的数据,并利用现有列数据生成新列
- Flutter之Redux框架原理解析
- java面试简历精通n_Java简历与面试
- html+css+javascript+jquery+bootstarp响应式旅行社旅游平台网站模板(14页)
- python不是5的倍数_python – 低于1000的3或5的所有倍数的总和
- 华为篇-嵌入式公司待遇盘点-第二期
- 防水穿墙套管在建筑外墙管道需设置柔性连接
- Oreilly的历史和公司概况
- 什么是软件EV代码签名证书
- 传感器技术—新型光电传感器(学习笔记十 补充)
- 如何根据历史数据监控当前数据是否异常
- 卡耐基:一个人的成功,只有15%是靠专业技术
热门文章
- (一)导学(前端框架面试-聚焦Vue/React/Webpack)
- 2021高考成绩查询省排名,重磅!2021全国各地高考预测分数线出炉,这样估分可以估算全省排名...
- 使用countup.js使数字动态叠加
- generator 中 调用另一个 generator
- for of 和 for in 在数组和对象中的区别
- position的四种属性
- OpenCV:使用OpenCV3随机森林进行统计特征多类分析
- Allegro PCB Design GXL (legacy) 由零散的对象构成一个Shape
- Oracle11gR2在9x8hk..Windows18669144449 命名进入Oracle
- 使用commons httpclient请求https协议的webservice