拦截器执行问题?

拦截器执行问题?

http://img1.sycdn.imooc.com//climg/5d75a8e40001b86704290078.jpg

1、拦截器2的preHandler方法返回false后,为什么拦截器1的afterCompletion方法还会执行

2、既然拦截器1的afterCompletion方法还会执行,那为什么拦截器2的afterCompletion方法不执行?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕柯南 2019-09-09 14:47:30

同学你好!

  1. 首先要知道afterCompletion在什么时候才会执行,afterCompletion只有preHandle返回true才调用

  2. 其次preHandle是顺序调用的,但是afterCompletion是逆序调用的。当执行第二个拦截器时preHandle返回了false,则拦截器便不会在往下执行,此时afterCompletion开始执行,第二个拦截器时preHandle返回了false,所以afterCompletion不执行,接着执行第一个拦截器的afterCompletion。

  3. 这里其中一个拦截器返回false(通常也就是最后一个拦截器,因为返回false就不会继续执行其它的拦截器了),之前执行成功的拦截器的afterCompletion便开始逆序调用。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~


好帮手慕柯南 2019-09-09 11:48:47

同学你好!

过个拦截器的执行过程

  1.  当两个拦截器都实现放行操作时,顺序为preHandle 1,preHandle 2,postHandle 2,        postHandle 1,afterCompletion 2,afterCompletion 1

  2.  当第一个拦截器preHandle返回false,也就是对其进行拦截时,第二个拦截器是完全不执       行 的,第一个拦截器只执行preHandle部分。

  3.  当第一个拦截器preHandle返回true,第二个拦截器preHandle返回false,顺序为

    preHandle1,preHandle 2 ,afterCompletion 1

而同学这里正好是第三种情况。

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~



  • 提问者 暗淡冬天 #1
    我想问的就是第三种情况中,为什么afterCompletion1还会执行,不应该是都不执行了吗
    2019-09-09 13:31:43
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师