springMvc拦截器的执行顺序!

拦截器的各个方法的作用:


/** * 登录验证拦截器 */

     public class Intercepter implements HandlerInterceptor {

    /*

     * 执行时机:视图已经被解析完毕,类似try catch 后的finally,追踪错误
*/
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception exception) throws Exception { } /**
* 执行时机:controller执行完,视图解析器没有把视图解析成页面,
* 对视图做统一的修改,主要体现在Model上,可以追加数据  
*/
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView mv) throws Exception {
      Map<String,Object> map=mv.getModel();
      map.put("test","append something");
} /**
* 执行时机:在执行controller之前来执行
* 返回值类型:boolean:true代表放行可以访问controller,false不可以访问controller
*/
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception { return false;
}
}

写了两个拦截器,配置如下:

<!-- 配置拦截器 -->
<mvc:interceptors>
<!-- 多个拦截器,顺序执行 -->
<mvc:interceptor>
<mvc:mapping path="/**"/><!-- 表示所有的url,包括子url路径 --><!-- 某一模块的拦截:/myPath/**, 拦截所有的请求/**-->
<bean class="com.interceptors.EncodingInterceptor"></bean>
</mvc:interceptor>
<!--配置登陆拦截器 -->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.interceptors.LoginHandlerIntercepter"></bean>
</mvc:interceptor>
</mvc:interceptors>

没写什么逻辑,就打印了log,LoginHandlerIntercepter中的log是01

结果简略如下:

preHandle.........
preHandle01.........
...
...
...
postHandle01.........
postHandle.........
...
...
...
afterCompletion01.........
afterCompletion.........

可以看出,按照拦截器的配置顺序先执行了字符拦截器,后执行了登录验证的拦截器;

但是:preHandler是按照拦截器的配置顺序执行的,而postHandler和afterCompletion是按照拦截器的配置顺序的倒序执行的

所以 :
如果统一日志处理器拦截器,需要改拦截器prehandler一定要返回true,且将它放在拦截器配置的第一个位置;
如果登陆认证拦截器,放在拦截器的配置中的第一个位置(有日志处理的话,放在日志处理下面);
如果有权限校验拦截器,则放在登陆拦截器之后,因为登陆通过后,才可以进行校验权限;

暂且记录这些。。。。

最新文章

  1. html中相似的标签、属性的区别
  2. mysql+mybatis+存储过程+事务 + 多并发流水号获取
  3. 关于 hangfire 的权限问题
  4. lucene 基本原理整理
  5. Django中级篇之模板语言
  6. inand和emmc区别
  7. Android自定义ActionBar
  8. latex 固定图片位置
  9. es6的一些个人总结
  10. PyQt4 初试牛刀一
  11. 实例化vue之前赋值html元素导致事件失效
  12. .NETCore 快速开发做一个简易商城
  13. [PHP] ubuntu下使用uuid扩展获取uuid
  14. SpringBoot入门教程(六)SpringBoot2.0统一处理404,500等http错误跳转页
  15. IDEA加载项目的设置是tomcat
  16. Vs code常用插件
  17. SSKeychain
  18. Hdu4687 Boke and Tsukkomi
  19. reduce()用法
  20. C++ 数据封装

热门文章

  1. python面向对象三大特性
  2. cocos2d-x 3.0的入门程序:helloworld
  3. 001.我的第一个Java程序
  4. RSA 加解密算法详解
  5. 网易OpenStack部署运维实战
  6. android 文件保存
  7. Spark 的情感分析
  8. 每天一个Linux命令(8):chmod命令
  9. WIN10把照片查看器设为默认看图软件
  10. Python 3基础教程1-环境安装和运行环境