1. 程式人生 > 實用技巧 >springMVC中的攔截器Interceptor

springMVC中的攔截器Interceptor

1 攔截器概念

攔截器( Interceptor)是一種動態攔截方法呼叫的機制 作用:

  1. 在指定的方法呼叫前後執行預先設定後的的程式碼

  2. 阻止原始方法的執行

 核心原理: AOP思想 攔截器鏈:多個攔截器按照一定的順序,對原始被呼叫功能進行增強

攔截器VS過濾器

 歸屬不同: Filter屬於Servlet技術, Interceptor屬於SpringMVC技術

 攔截內容不同: Filter對所有訪問進行增強, Interceptor僅針對SpringMVC的訪問進行增強

2自定義攔截器開發過程

實現HandlerInterceptor介面

//自定義攔截器需要實現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>