Spring為我們提供了:org.springframework.web.servlet.HandlerInterceptor接口,
org.springframework.web.servlet.handler.HandlerInterceptorAdapter擴充卡,
實作這個接口或繼承此類,可以非常友善的實作自己的攔截器。
有以下三個方法:
Action之前執行
生成視圖之前執行
最後執行,可用于釋放資源
分别實作預處理、後處理(調用了Service并傳回ModelAndView,但未進行頁面渲染)、傳回處理(已經渲染了頁面)
在preHandle中,可以進行編碼、安全控制等處理;
在postHandle中,有機會修改ModelAndView;
在afterCompletion中,可以根據ex是否為null判斷是否發生了異常,進行日志記錄。
參數中的Object handler是下一個攔截器。
如何使用攔截器
自定義一個攔截器,要實作HandlerInterceptor接口:
在springMVC的配置檔案中配置有三種方法
一、攔截所有URL
二、攔截比對的URL
三、HandlerMappint上的攔截器
如果使用了<mvc:annotation-driven />, 它會自動注冊DefaultAnnotationHandlerMapping 與
AnnotationMethodHandlerAdapter 這兩個bean,是以就沒有機會再給它注入interceptors屬性,就無法指定攔截器。
當然我們可以通過人工配置上面的兩個Bean,不使用 <mvc:annotation-driven />,
就可以給interceptors屬性注入攔截器了。
攔截器MyInterceptor類
spring配置檔案
測試URL:http://localhost:8080/spring_Interceptor/login
檢視背景會執行攔截器代碼
項目源碼下載下傳:待上傳