簡介
SpringMVC的處理器攔截器,類似於Servlet開發中的過濾器Filter,用於對請求進行攔截和處理。
常見應用場景
1、權限檢查:如檢測請求是否具有登錄權限,如果沒有直接返回到登陸頁面。
2、性能監控:用請求處理前和請求處理后的時間差計算整個請求響應完成所消耗的時間。
3、日志記錄:可以記錄請求信息的日志,以便進行信息監控、信息統計等。
使用方法
1、配置文件
<mvc:interceptors> <!--對所有的請求記性攔截--> <!--<beans:beanclass="com.sunp.common.interceptor.Myinterceptor"/>--> <!--對特定的請求進行攔截--> <mvc:interceptor> <!--進行攔截的路徑--> <mvc:mapping path="/**"/> <!--不進行攔截的路徑--> <mvc:exclude-mapping path="/lib/**" /> <beans:bean class="com.sunp.common.interceptor.Myinterceptor"/> </mvc:interceptor> </mvc:interceptors>
2、實現接口並繼承方法(可以同時包含多個實現類)
public class myInterceptor implements HandlerInterceptor{ @Override public boolean preHandler(HttpServletRequest request, HttpServletResponse response, Object obj)throws Exception{ /*該方法將在請求處理之前進行調用,只有該方法返回true,才會繼續執行后續的Interceptor和Controller,當返回值為true 時就會繼續調用下一個Interceptor的preHandle 方法,如果已經是最后一個Interceptor的時候就會是調用當前請求的Controller方法;*/ } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response,Object obj,Exception e)throws Exception { /*該方法將在請求處理之后,DispatcherServlet進行視圖返回渲染之前進行調用,可以在這個方法中對Controller 處理之后的ModelAndView 對象進行操作。*/ } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object arg2,ModelAndView arg3) throws Exception { /*該方法也是需要當前對應的Interceptor的preHandle方法的返回值為true時才會執行,該方法將在整個請求結束之后,也就是在DispatcherServlet 渲染了對應的視圖之后執行。用於進行資源清理。*/ } }
執行順序
1、單個實現類的執行順序
preHandler -> Controller -> postHandler -> model渲染-> afterCompletion
2、多個實現類的執行順序
———————preHandler1——————-
———————preHandler2——————-
———————preHandler3——————-
———————–Controller———————
———————postHandler3——————
———————postHandler2——————
———————postHandler1——————
———————postHandler1——————
——————afterCompletion3—————-
——————afterCompletion2—————-
——————afterCompletion1—————-