1. 程式人生 > >第四十章:Spring MVC框架之攔截器10

第四十章:Spring MVC框架之攔截器10

第八章 攔截器

攔截器最典型的用法是檢查使用者是否登入,登入後可以執行目標handler方法,未登入則跳轉到登入頁面。這樣的操作要是在每個攔截器內部來寫就太麻煩了,統一提取到攔截器中是明智之舉。
1.HandlerInterceptor介面
①preHandle()方法

簽名:boolean preHandle(HttpServletRequest, HttpServletResponse, Object) 在執行目標handler方法之前執行,如果返回true,則繼續執行後續攔截器和目標handler方法;如果返回false則不執行。注意:返回false時最好藉助轉發或重定向等方式為客戶端提供一個響應頁面。
②postHandle()方法

簽名:void postHandle(HttpServletRequest, HttpServletResponse, Object, ModelAndView) 在執行目標handler方法之後、渲染檢視之前執行。
③afterCompletion()方法

在渲染檢視之後、返回響應之前執行。
2.HandlerInterceptorAdapter類

實現HandlerInterceptor介面需要把所有抽象方法都實現,而繼承HandlerInterceptorAdapter類則可以有選擇的重寫需要的方法,更加便捷,推薦使用。

在這裡插入圖片描述

3.配置方式
①攔截所有請求

<mvc:interceptors>
    <bean class="com.interceptor.FirstInterceptor"/>
    <bean class="com.interceptor.SecondInterceptor"/>
</mvc:interceptors>

②精確指定攔截的請求

<mvc:interceptors>
    <bean class="com.interceptor.FirstInterceptor"/>
    <bean class="com.interceptor.SecondInterceptor"/>
    <mvc:interceptor>
        <mvc:mapping path="/*"/>
        <mvc:exclude-mapping path="/specailPath"/>
        <bean class="com.interceptor.SpecialInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

4.多個攔截器的執行順序

①按正序依次呼叫preHandle()方法 ②執行目標handler方法 ③按反序呼叫postHandle()方法 ④按反序呼叫afterCompletion()方法