過濾器和攔截器的不同以及執行順序和使用場景的總結

過濾器filter和攔截器interceptor的比較

之前看過一篇博客有這麼一句話:

過濾器是取你所想,攔截器是拒你所不想

但其實兩者都可以理解爲起過濾的作用。

具體區別而言,總結有如下幾點:

方面 filter interceptor
實現原理 基於函數回調 java反射,動態代理
是否依賴servlet java原生,依賴servlet spring框架所有,不依賴servlet
作用範圍 所有的url,可以配置 無法配置url,只是針對實現某接口的類的方法在其前後進行處理,這也正是動態代理的邏輯
是否可以自動注入context中的bean 不能,但可以通過getBean方法獲得 可以
如何選擇 在純Java的應用中儘量選擇filter,減小第三方 在spring應用中官方推薦interceptor

執行順序

過濾器 -> 攔截器 -> aop -> 業務邏輯 -> 攔截器的post方法 -> filter的destroy

使用場景

  1. 日誌記錄:記錄請求相關的日誌,容易進行統計和監控。

  2. 權限檢查:如登錄檢測 。

  3. 性能監控或者問題排查:攔截器可以在某個方法執行前後進行處理,通過攔截器可以將一個請求的調用鏈每個環節的時間打印出來進行問題排查,當然現在可以使用APM;

  4. 通用行爲:獲取一些全局需要的信息,例如通過token獲得用戶信息,將用戶信息放在securityContext中,通過@ModelAttribure直接在controller中使用。


推薦閱讀:
@ModelAttribute實踐總結

看了同事代碼,我發現我不會枚舉

spring DispatcherSeervlet請求處理邏輯

spring啓動過程分析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章