天天看點

springmvc-filter與Interceptor的差別

應用場景

1、日志記錄:記錄請求資訊的日志,以便進行資訊監控、資訊統計、計算PV(Page View)等。

2、權限檢查:如登入檢測,進入處理器檢測檢測是否登入,如果沒有直接傳回到登入頁面;

3、性能監控:有時候系統在某段時間莫名其妙的慢,可以通過攔截器在進入處理器之前記錄開始時間,在處理完後記錄結束時間,進而得到該請求的處理時間(如果有反向代理,如apache可以自動記錄);

4、通用行為:讀取cookie得到使用者資訊并将使用者對象放入請求,進而友善後續流程使用,還有如提取Locale、Theme資訊等,隻要是多個處理器都需要的即可使用攔截器實作。

5、OpenSessionInView:如hibernate,在進入處理器打開Session,在完成後關閉Session。

Interceptor

基于java的反射機制的;

不依賴于servlet容器;

隻能對action請求起作用;

可以通路action上下文、值棧裡的對象;

在action的生命周期中,攔截器可以多次被調用;

能夠深入到方法前後、異常抛出前後

filter

基于函數回調。

依賴于servlet容器。

可以對幾乎所有的請求起作用

隻在容器初始化時被調用一次。

針對URL位址做一個編碼的事情、過濾掉沒用的參數、安全校驗(比較泛的,比如登入不登入之類);

隻在Servlet前後起作用;