spring過濾器

什麼是過濾器

        Spring 中不能處理用戶請求,但能夠用來提供過濾做用的一種Servlet規範。在請求進入容器以後,還未進入Servlet以前進行預處理,而且在請求結束返回給前端這之間進行後期處理。具體則是經過截取用戶端的請求與響應信息,並對之進行過濾,即在Servlet被調用以前檢查Request對象,修改Request Header和Request內容;在Servlet被調用以後檢查Response對象,修改Response Header和Response內容。前端

過濾器做用

       過濾器也能起到攔截請求並做出相應的行動。好比: 能夠進行(BA)認證過濾,登錄過濾等。java

過濾器實現方式

       經過實現Filter接口,也能夠經過實現AbstractFilter抽象類。web

Filter接口  展開原碼

init

     初始化操做,FilterConfig用來獲取web.xml中關於初始化的配置(init-param)。spring

doFilter

    完成實際的過濾操做, 當客戶請求訪問與過濾器關聯的URL時,Servlet容器將先調用過濾器的doFilter方法。FilterChain參數用於訪問後續過濾器。服務器

destroy

過濾器銷燬時被調用, 即釋放過濾器佔用的資源。app

注意事項: 同一個Url定義多個過濾器時,服務器會按照定義前後順序組成過濾器鏈,前後執行filter的doFilter方法。ide

過濾器和攔截器對比

 
過濾器(Filter)
攔截器(Interceptor)
原理 基於函數回調 基於java的反射機制
是否依賴Servlet容器
是否能訪問action上下文、值棧裏的對象
在action的生命週期中,是否屢次被調用 否,僅在容器初始化時被調用一次
攔截範圍 全部請求 僅能對action請求
是否能夠獲取Ioc容器中的各個bean(是否屬於Spring的組件) 是,在攔截器裏注入一個service,便可以調用業務邏輯。
使用範圍不一樣 只能用於Web程序中 不只能用於Web中,也能夠用於Application、Swing程序中
規範不一樣 Servlet容器支持的 Spring容器支持的
深度不一樣 Servlet先後 深刻到方法先後、異常拋出先後

過濾器和攔截器執行順序圖

 

 

 

相關連接:函數

Spring學習——過濾器學習

相關文章
相關標籤/搜索