对于拦截器的使用流程分析
HandlerInterceptor是拦截器接口,在项目运行时会在请求发送后执行拦截器方法。同时也可以自定义拦截器。可以看到我们需要实现接口下的几个方法:
- preHandle (HttpServletRequest request, HttpServletResponse response, Object handler)
- postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
- afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
- 拦截器原理:
1、根据当前请求,找到HandleExecutionChain(可以处理请求的handler以及handle的所有拦截器)
2、先进行顺序执行所有拦截器的prehandle方法。
如果当前拦截器prehandle返回为true,则执行下一个拦截器的prehandle。
如果当前拦截器放回false,则倒序执行此前执行了prehandle方法的拦截器的afterCompletion;
3、如果任何一个拦截器返回false,直接跳出不执行目标方法。
4、所有拦截器都返回true,执行目标方法。
5、倒序执行所有拦截器的postHandle方法。
6、前面的步骤有任何异常都会直接触发afterCompletion
7、页面成功渲染完成以后也会倒序触发afterCompletion。
图为雷丰阳老师所绘