攔截器:顧名思義,就是對請求進行攔截,做一些預處理、后處理或返回處理的操作
Spring MVC中使用攔截器的方法,繼承HandlerInterceptorAdapter類,並根據需求實現其中的preHandle方法(預處理)、postHandle方法(返回處理),afterCompletion方法(后處理)。
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
return true;
}
public void postHandle(
HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception {
}
public void afterCompletion(
HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
現在着重說preHandler方法:
當請求來的時候,先經過applyPreHandle,內部會按順序獲取所有的攔截器,並依次攔截
當進入攔截器鏈中的某個攔截器,並執行preHandle方法后
1.當preHandle方法返回false時,從當前攔截器往回執行所有攔截器的afterCompletion方法,再退出攔截器鏈。也就是說,請求不繼續往下傳了,直接沿着來的鏈往回跑。
2.當preHandle方法全為true時,執行下一個攔截器,直到所有攔截器執行完。再運行被攔截的Controller。然后進入攔截器鏈,運行所有攔截器的postHandle方法,完后從最后一個攔截器往回執行所有攔截器的afterCompletion方法.