- 先说登录检查,上图
可以选择实现HandlerInterceptor接口,也可以继承HandlerInterceptorAdapter
在springmvc中配置
拦截器:实现HandlerInterceptor中的几个方法介绍
自定义配置多个
单个拦截器中和多个拦截器并存时三个方法的执行顺序的规律:
若该方法返回的false,则不会继续执行,为true才会继续执行下一个方法
- 单个拦截器的执行顺序:
先定义一个拦截器:Interceptor1.java测试它里面三个方法的拦截顺序
======Interceptor1=============preHandle======
======Interceptor1=============postHandle======
======Interceptor1=============afterCompletion======
- 多个拦截器的执行顺序:
- 两个拦截器中preHandle方法都返回true时:在配置文件中配置顺序是先1后2
preHandle:(配置的正序)
======Interceptor1=============preHandle======
======Interceptor2=============preHandle======
postHandle:(配置的反序)
======Interceptor2=============postHandle======
======Interceptor1=============postHandle======
afterCompletion:(配置的反序)
======Interceptor2=============afterCompletion======
======Interceptor1=============afterCompletion======
-
- 两个拦截器中preHandle方法都返回true时:在配置文件中配置顺序是先2后1
preHandle:(配置的正序)
======Interceptor2=============preHandle======
======Interceptor1=============preHandle======
postHandle:(配置的反序)
======Interceptor1=============postHandle======
======Interceptor2=============postHandle======
afterCompletion:(配置的反序)
======Interceptor1=============afterCompletion======
======Interceptor2=============afterCompletion======
当都所有拦截器都返回true时,此时总的规律:先开始的后结束。
-
- 中断流程测试
- 让Interceptor2的preHandle方法返回false时:(配置顺序中不是第一个的拦截器)
======Interceptor1=============preHandle======
======Interceptor2=============preHandle======
======Interceptor1=============afterCompletion======
说明:
首先拦截器2的preHandle返回false,它自己的后续方法全部中断。
其次拦截器1的preHandle返回true,但是它的postHandle也没有执行,说明postHandle受到所有拦截器的preHandle方法返回值的影响
再次拦截器1的afterCompletion方法却执行了,说明afterCompletion不受其他拦截器的preHandle方法返回值的影响。
结论:
postHandle受所有拦截器的preHandle执行结果的影响,只有全部preHandle都返回true时才执行
afterCompletion只受它自己所属拦截器中preHandle的影响,preHandle返回true时执行。
- 让Interceptor1的preHandle方法返回false时:(配置顺序中的第一个拦截器)
======Interceptor1=============preHandle======
结论:
配置顺序第一个拦截器的preHandle返回了false,则中断所有后续处理。