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

springMVC攔截器

Interceptor的主要作用是攔截使用者的請求並進行相應的處理。比如通過它來進行許可權驗證,或者是來判斷使用者是否登陸等。

自定義實現一個攔截器的步驟

1.定義一個實現 HandlerInterceptor 介面 的類

public class MyInterceptor1 implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("MyInterceptor執行了。。。。");
        return true;
    }
}

HandlerInterceptor 介面類介紹:

這個介面中有三個預設方法:preHandle、postHandle、afterCompletion

public interface HandlerInterceptor {
    default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;
    }

    default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
    }

    default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
    }
}

  preHandle:在業務處理器處理請求之前被呼叫,通俗的講就是在瀏覽器請求中所請求的controller層的方法前會執行此方法

    注意:當此方法返回true時,並且當前專案只配置了當前這一個攔截器,那麼就會執行請求中呼叫的controller層中的方法。

       若此方法返回true,但是當前專案配置多個攔截器,則當前攔截器的preHandle方法執行後會進入其他攔截器執行其中的preHandle方法,直到所有攔截器都執行完其中preHandle方法,並且所有攔截器都是返回true,才會執行請求中呼叫的controller層中的方法。

       若返回false,我們就可以通過HttpServletRequest 物件進行請求轉發,或者通過HttpServletResponse 進行重定向,跳轉到指定頁面。

  postHandle:在業務處理器處理請求完成之後,生成檢視之前執行,就是在瀏覽器請求中所請求的controller層的方法後會執行此方法

  afterCompletion:在DispatcherServlet完全處理完請求之後被呼叫,可用於清理資源 ,就是在跳轉到jsp頁面後會執行此方法。

2.在 springmvc 的配置檔案中 ,新增攔截器配置

<mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/user/**"/>
            <bean class="com.xj.controller.interceptor.MyInterceptor1"></bean>
        </mvc:interceptor>
    </mvc:interceptors>