SpringMvc拦截器

SpringMVC提供了拦截器机制;允许运行目标方法之前进行一些拦截工作,或者目标方法运行之后进行一些其他处理;

Filter;javaWeb

HandlerInterceptor:SpringMVC

 

 

preHandle:在目标方法运行之前调用;返回boolean;return true;(chain.doFilter())放行; return false;不放行

postHandle:在目标方法运行之后调用:目标方法调用之后

afterCompletion:在请求整个完成之后;来到目标页面(或者是报错页面)之后;

 

1)、正常写控制器类,拦截器类与控制器类分开写

2)、拦截器是一个接口,实现HandlerInterceptor接口;

3)、springmvc.xml配置拦截器

4)、拦截器的运行流程

1、单个拦截器

 

正常运行流程;

 拦截器的preHandle----目标方法---拦截器postHandle---目标页面---拦截器的afterCompletion;

MyFirstInterceptor...preHandle...

test01....

MyFirstInterceptor...postHandle...

success.jsp....

MyFirstInterceptor...afterCompletion

其他流程:

1、只要preHandle不放行(return false)就没有以后的流程;

2、只要preHandle放行了,不管目标方法handler炸不炸,afterCompletion总是都会执行;

 

2、多个拦截器

正常流程:

Af-----------------------Bf-------------------------

先进后出,后进先出

MyFirstInterceptor...preHandle...

MySecondInterceptor...preHandle...

test01....

MySecondInterceptor...postHandle...

MyFirstInterceptor...postHandle...

success.jsp....

MySecondInterceptor...afterCompletion...

MyFirstInterceptor...afterCompletion

 

异常流程

1、不放行;

     1)、哪一块不放行从此以后都没有;

     但是MySecondInterceptor不放行;但是他前面已经放行了的拦截器的afterCompletion总会执行;

 

MyFirstInterceptor...preHandle...

MySecondInterceptor...preHandle...

MyFirstInterceptor...afterCompletion

3.总结

拦截器的preHandle:是按照顺序执行(放行)

拦截器的postHandle:是按照逆序执行

拦截器的afterCompletion:是按照逆序执行;

已经放行了的拦截器的afterCompletion总会执行;

posted @ 2019-11-21 18:15  月半大熊猫  阅读(225)  评论(0编辑  收藏  举报