springMVC中的攔截器Interceptor
阿新 • • 發佈:2020-11-23
-
在指定的方法呼叫前後執行預先設定後的的程式碼
-
阻止原始方法的執行
核心原理: AOP思想 攔截器鏈:多個攔截器按照一定的順序,對原始被呼叫功能進行增強
//自定義攔截器需要實現HandleInterceptor介面public class MyInterceptor implements HandlerInterceptor { //處理器執行之前執行 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("前置執行----a1");//返回值為false將攔截原始處理器的執行 //如果配置多攔截器,返回值為false將終止當前攔截器後面配置的攔截器的執行 return true; } //處理器執行之後執行 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)throws Exception { System.out.println("後置執行----b1"); } //所有攔截器的後置執行全部結束後,執行該操作 @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("完成執行----c1"); } //三個方法的執行順序為 preHandle -> postHandle -> afterCompletion //如果preHandle返回值為false,三個方法僅執行preHandle }
3
<!--開啟攔截器使用--> <mvc:interceptors> <!--開啟具體的攔截器的使用,可以配置多個--> <mvc:interceptor> <!--設定攔截器的攔截路徑,支援*通配--> <!--/** 表示攔截所有對映--> <!--/* 表示攔截所有/開頭的對映--> <!--/user/* 表示攔截所有/user/開頭的對映--> <!--/user/add* 表示攔截所有/user/開頭,且具體對映名稱以add開頭的對映--> <!--/user/*All 表示攔截所有/user/開頭,且具體對映名稱以All結尾的對映--> <mvc:mapping path="/*"/> <mvc:mapping path="/**"/> <mvc:mapping path="/handleRun*"/> <!--設定攔截排除的路徑,配置/**或/*,達到快速配置的目的--> <mvc:exclude-mapping path="/b*"/> <!--指定具體的攔截器類--> <bean class="com.itheima.interceptor.MyInterceptor"/> </mvc:interceptor> <!--配置多個攔截器,配置順序即為最終執行順序--> <mvc:interceptor> <mvc:mapping path="/*"/> <bean class="com.itheima.interceptor.MyInterceptor2"/> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/*"/> <bean class="com.itheima.interceptor.MyInterceptor3"/> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.itheima.interceptor.MyInterceptor4"/> </mvc:interceptor> </mvc:interceptors>