拦截器执行问题?
1、拦截器2的preHandler方法返回false后,为什么拦截器1的afterCompletion方法还会执行
2、既然拦截器1的afterCompletion方法还会执行,那为什么拦截器2的afterCompletion方法不执行?
正在回答 回答被采纳积分+1
同学你好!
首先要知道afterCompletion在什么时候才会执行,afterCompletion只有preHandle返回true才调用
其次preHandle是顺序调用的,但是afterCompletion是逆序调用的。当执行第二个拦截器时preHandle返回了false,则拦截器便不会在往下执行,此时afterCompletion开始执行,第二个拦截器时preHandle返回了false,所以afterCompletion不执行,接着执行第一个拦截器的afterCompletion。
这里其中一个拦截器返回false(通常也就是最后一个拦截器,因为返回false就不会继续执行其它的拦截器了),之前执行成功的拦截器的afterCompletion便开始逆序调用。
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
同学你好!
过个拦截器的执行过程
当两个拦截器都实现放行操作时,顺序为preHandle 1,preHandle 2,postHandle 2, postHandle 1,afterCompletion 2,afterCompletion 1
当第一个拦截器preHandle返回false,也就是对其进行拦截时,第二个拦截器是完全不执 行 的,第一个拦截器只执行preHandle部分。
当第一个拦截器preHandle返回true,第二个拦截器preHandle返回false,顺序为
preHandle1,preHandle 2 ,afterCompletion 1
而同学这里正好是第三种情况。
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
- 参与学习 人
- 提交作业 323 份
- 解答问题 8263 个
本阶段将带你学习主流框架SSM,以及SpringBoot ,打通成为Java工程师的最后一公里!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星