攔截器與過濾器的不一樣點

Java中攔截器與過濾器的不一樣點

題外話:web

在課堂上忽然被老師點名回答問題:SpringSecurity 框架是經過攔截器的技術來實現檢查認證功能的,在以前 Servlet 的學習中,咱們學過了過濾器技術,那麼請你回答一下過濾器與攔截器之間的不一樣。spring

額...額...額...編程

疏於總結的我一下就被問住了,只簡簡單單說了一句:攔截器與過濾器都是對於客戶端發送到服務端的請求進行攔截進行一些業務操做的技術;mvc

說了跟沒說同樣,並且答非所問,由於平時的知識不成體系,知識點與知識點之間並無多少關聯性,致使記憶起來也是十分低效,何況天天用來梳理知識的時間佔比並不大。而後很「坦率」地交待了:其餘的我不記得了框架

很是尷尬函數

因此簡單小結一下兩者的差異:性能

1. 底層實現

  • 過濾器(Filter)是基於函數回調,屬於 servlet 規範一部分,依賴於 servlet 容器,任何框架均可以使用過濾器技術
  • 攔截器(Interceptor)是基於java的反射機制, 依賴於 web 框架,例如:SpringMVC,屬於面向切面編程(AOP)的一種實現方式

2. 攔截資源

  • 過濾器配置了 /* ,能夠攔截任何資源及請求
  • 攔截器只攔截 action 請求(不攔截靜態資源請求)

3. 應用場景

  • 使用過濾器的目的是用來作一些過濾操做,獲取咱們想要的數據,好比
    • 在過濾器中修改字符編碼
    • 在過濾器中修改 HttpServletRequest 的一些參數,包括:敏感詞過濾等
  • 攔截器是基於web框架的調用,所以可使用Spring的依賴注入(攔截器類中注入一個service bean)進行一些業務操做,好比
    • 日誌記錄:記錄請求信息的日誌
    • 權限檢查:如登陸檢查(通常使用 SpringSecurity 框架)
    • 性能檢測:檢測方法的執行時間

4. 侷限性比較

  • 攔截器實例在 action 請求的生命週期內能夠屢次調用,一個過濾器實例只會在容器初始化時調用一次
  • 攔截器能夠獲取 spring 容器裏的對象,過濾器不能夠

5. 攔截器是被包裹在過濾器之中

Ps:何謂 action 請求?學習

我的理解:springmvc中,客戶端向服務端的控制層發起的一切請求編碼

相關文章
相關標籤/搜索