2013年9月9日

Spring MVC 3 實作教學 (11) - 使用 Interceptor ( Request 攔截、過濾 ) ( Add Interceptor )

Interceptor 是什麼?簡單來說,即當 Request 來臨時,想針對 Controller 執行前、後額外做特定的動作時就可以使用 Interceptor 來攔截並執行你想要的動作,例如簡單的登入機制、限制特定 IP 網段的使用者。而在 Spring MVC 使用 Interceptor 是很簡單的一件事情。



首先來定義自訂的 Interceptor 類別內容。程式內容如下:


可以看到上面自訂的 Interceptor 實作了 HandlerInterceptor ,因此我們需要實作其中三個 Method,分別為:preHandlepostHandlerafterCompletion,這三個 Method 執行時間點分別是有順序的,稍後透過 Log 紀錄就可以清楚瞭解。

接著來設定 Spring 設定檔 ( 如同前面範例為:mercury-servlet.xml ) 宣告要使用該 Interceptor ,內容如下:


在Spring 設定檔中可以宣告 Interceptor 需要攔截哪些 Request URL,如同上面設定該 Interceptor 只會針對符合 /common/* 的 Request 去動作。為了紀錄整個過程在 Controller 裡面插入 Log,如下:


接著來試著執行,Log 完整紀錄如下:



由此看到執行的順序為 preHandle  >  Controller  >  postHandle  >  afterCompletion。當然也可以使用多個 Interceptor ,範例設定如下:


多個 Interceptor 執行結果如下:


以上為基本、簡單的 Spring MVC 應用 Interceptor 介紹,最後附上檔案的配置。


其他 Spring Framework 相關教學可以參考本篇整理


熱門文章