拦截器原理
- 根据当前请求,找到
HandlerExecutionChain
执行链,执行链可以处理当前请求的handler
方法以及handler
方法的所有拦截器
- 先来顺序执行所有拦截器的
preHandle
方法
(1)如果当前拦截器preHandle
返回为true
,说明放行,则执行下一个拦截器的preHandle
方法
(2)如果当前拦截器preHandle
返回为false
,说明不放行,则倒序执行所有已经执行了的拦截器的afterCompletion
- 如果任何一个拦截器返回
false
,就直接跳出,不会执行目标方法 - 所有拦截器都返回
true
才会执行目标方法 - 倒序执行所有拦截器的
postHandle
方法 - 之前的所有步骤如果有任何异常就不会继续向下执行,但都会直接倒序触发
afterCompletion
- 如何没有任何异常,页面成功渲染完成以后,也会倒序触发
afterCompletion
方法
拦截器执行流程图: