首頁 > 軟體

Java SpringMVC實現自定義攔截器

2022-03-15 19:00:40

SpringMVC實現自定義攔截器

1 攔截器(interceptor)的作用

Spring MVC 的攔截器類似於 Servlet 開發中的過濾器 Filter,用於對處理器進行預處理和後處理。

將攔截器按一定的順序聯結成一條鏈,這條鏈稱為攔截器鏈(InterceptorChain)。在存取被攔截的方法或欄位時,攔截器鏈中的攔截器就會按其之前定義的順序被呼叫。攔截器也是AOP思想的具體實現。

2 攔截器和過濾器區別

關於interceptor和filter的區別,如圖所示:

3.實現過程

步驟分析:

1.建立攔截器類實現HandlerInterceptor介面

2.設定攔截器

3.測試攔截器的攔截效果

3.1建立攔截器類實現HandlerInterceptor介面

public class MyInterceptor implements HandlerInterceptor {
    /**
     *         preHandle: 在目標方法執行之前 進行攔截   return false:不放行
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle1....");
        return true;
    }
    /**
     *       postHandle: 在目標方法執行之後,檢視物件返回之前,執行的方法
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle1....");
    }
    /**
     *        afterCompletion:在流程都執行完成後,執行的方法
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion1....");
    }

}

3.2設定攔截器

<!--    設定攔截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--對哪些資源執行攔截操作 path="/**"表示對controller層所有方法進行攔截 -->
            <mvc:mapping path="/**" />
            <bean class="com.weihong.interceptor.MyInterceptor" />
        </mvc:interceptor>
    </mvc:interceptors>

3.3測試攔截器的攔截效果

    @RequestMapping("/target")
    public String targetMethed(){
        System.out.println("目標方法執行了");
        return "interceptor";
    }

3.4編寫jsp頁面

<html>
<head>
    <title>Title</title>
</head>
<body>
    <h3>success~~~~~~</h3>
    <% System.out.println("檢視執行了....");%>
</body>
</html>

3.5測試結果

4. 攔截器鏈

開發中攔截器可以單獨使用,也可以同時使用多個攔截器形成一條攔截器鏈。開發步驟和單個攔截器是一樣的,只不過註冊的時候註冊多個,注意這裡註冊的順序就代表攔截器執行的順序。

同上,再編寫一個MyHandlerInterceptor2操作,測試執行順序:

<!--設定攔截器-->
<mvc:interceptors>
  <mvc:interceptor>
    <!--攔截器路徑設定-->
    <mvc:mapping path="/**"/>
    <!--自定義攔截器類-->
    <bean class="com.lagou.interceptor.MyInterceptor1"></bean>
  </mvc:interceptor>
  <mvc:interceptor>
    <!--攔截器路徑設定-->
    <mvc:mapping path="/**"/>
    <!--自定義攔截器類-->
    <bean class="com.lagou.interceptor.MyInterceptor2"></bean>
  </mvc:interceptor>
</mvc:interceptors>

5. 知識小結

攔截器中的方法說明如下:

總結

本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!  


IT145.com E-mail:sddin#qq.com