Spring 中不能處理用戶請求,但能夠用來提供過濾做用的一種Servlet規範。在請求進入容器以後,還未進入Servlet以前進行預處理,而且在請求結束返回給前端這之間進行後期處理。具體則是經過截取用戶端的請求與響應信息,並對之進行過濾,即在Servlet被調用以前檢查Request對象,修改Request Header和Request內容;在Servlet被調用以後檢查Response對象,修改Response Header和Response內容。前端
過濾器也能起到攔截請求並做出相應的行動。好比: 能夠進行(BA)認證過濾,登錄過濾等。java
經過實現Filter接口,也能夠經過實現AbstractFilter抽象類。web
初始化操做,FilterConfig用來獲取web.xml中關於初始化的配置(init-param)。spring
完成實際的過濾操做, 當客戶請求訪問與過濾器關聯的URL時,Servlet容器將先調用過濾器的doFilter方法。FilterChain參數用於訪問後續過濾器。服務器
過濾器銷燬時被調用, 即釋放過濾器佔用的資源。app
注意事項: 同一個Url定義多個過濾器時,服務器會按照定義前後順序組成過濾器鏈,前後執行filter的doFilter方法。ide
|
過濾器(Filter)
|
攔截器(Interceptor)
|
---|---|---|
原理 | 基於函數回調 | 基於java的反射機制 |
是否依賴Servlet容器 | 是 | 否 |
是否能訪問action上下文、值棧裏的對象 | 否 | 是 |
在action的生命週期中,是否屢次被調用 | 否,僅在容器初始化時被調用一次 | 是 |
攔截範圍 | 全部請求 | 僅能對action請求 |
是否能夠獲取Ioc容器中的各個bean(是否屬於Spring的組件) | 否 | 是,在攔截器裏注入一個service,便可以調用業務邏輯。 |
使用範圍不一樣 | 只能用於Web程序中 | 不只能用於Web中,也能夠用於Application、Swing程序中 |
規範不一樣 | Servlet容器支持的 | Spring容器支持的 |
深度不一樣 | Servlet先後 | 深刻到方法先後、異常拋出先後 |
相關連接:函數