過濾器技術
- 過濾器
- 過濾器的運行原理
- 過濾器鏈
- 過濾器的核心介面
- Filter
- FilterConfig
- FilterChain
- 過濾器的生命周期
- 過濾器的開發
- 過濾器的應用
過濾器
過濾器(Filter)也稱之為攔截器,是Servlet 2.3規范新增的功能,在Servlet 2.4規范中得到增強,
過濾器是Servlet技術中非常實用的技術,Web開發人員通過過濾器技術,可以在用戶訪問某個Web資源(如:JSP、Servlet、HTML、圖片、CSS等)之前,對訪問的請求和回應進行攔截,從而實作一些特殊功能,例如,驗證用戶訪問權限、記錄用戶操作、對請求進行重新編碼、壓縮回應資訊等,
過濾器所處的位置:

過濾器的運行原理
過濾器的運行原理:
- 當用戶的請求到達指定的網頁之前,可以借助過濾器來改變這些請求的內容,此程序也稱為“預處理”,
- 當執行結果要回應到用戶之前,可經過過濾器修改回應輸出的內容,此程序稱為“后處理”,
一個過濾器的運行程序可以分解為如下幾個步驟:
- Web容器判斷接收的請求資源是否有與之匹配的過濾器,如果有,容器將請求交給相應過濾器進行處理,
- 在過濾器預處理程序中,可以改變請求的內容,或者重新設定請求的報頭資訊,然后將請求發給目標資源,
- 目標資源對請求進行處理后作出回應,
- 容器將回應轉發回過濾器,
- 在過濾器后處理程序中,可以根據需求對回應的內容進行修改,
- Web容器將回應發送回客戶端,
過濾器鏈
在一個Web應用中,也可以部署多個過濾器,這些過濾器組成了一個過濾器鏈,
過濾器鏈中的每個過濾器負責特定的操作和任務,客戶端的請求可以在這些過濾器之間進行傳遞,直到達到目標資源,
例如,一個由兩個過濾器所組成的過濾器鏈的過濾程序:

在客戶端的請求回應程序中,并不需要經過所有的過濾器鏈,而是根據過濾器鏈中每個過濾器的過濾條件來匹配需要過濾的資源,
過濾器的核心介面
過濾器的實作主要依靠以下核心介面:
- javax.servlet.Filter
- javax.servlet.FilterConfig
- javax.servlet.FilterChain
Filter
與開發Servlet需要實作Servlet介面類似,開發過濾器要實作javax.servlet.Filter介面,并提供一個公共的不帶引數的構造方法,
Filter介面的方法及說明:

FilterConfig
javax.servlet.FilterConfig介面由容器實作,容器將其實體作為引數傳入過濾器物件的初始化方法init()中,來獲取過濾器的初始化引數和Servlet的相關資訊,
FilterConfig介面的主要方法及作用:

FilterChain
javax.servlet.FilterChain介面由容器實作,容器將其實體作為引數傳入過濾器物件的doFilter()方法中,過濾器物件使用FilterChain物件呼叫過濾器鏈中的下一個過濾器,如果該過濾器是鏈中最后一個過濾器,那么將呼叫目標資源,
FilterChain介面主要方法及作用:

過濾器的生命周期
與Servlet類似,Filter介面定義的三個方法也與過濾器的生命周期有著直接的關系,
過濾器的生命周期分為四個階段:
- 加載和實體化
Web容器啟動時,會根據@WebFilter屬性filterName所定義的類名的大小寫拼寫順序,或者web.xml中宣告的Filter順序依次實體化Filter, - 初始化
Web容器呼叫init(FilterConfig config)方法來初始化過濾器,容器在呼叫該方法時,向過濾器傳遞FilterConfig物件,實體化和初始化的操作只會在容器啟動時執行,并且只會執行一次, - doFilter()方法的執行
當客戶端請求目標資源的時候,容器會篩選出符合過濾器映射條件的Filter,并按照@WebFilter屬性filterName所定義的類名的大小寫拼寫順序,或者web.xml中宣告的filter-mapping的順序依次呼叫這些過濾器的doFilter()方法,
在這個鏈式呼叫程序中,可以呼叫FilterChain物件的doFilter方法將請求傳給下一個過濾器(或目標資源),也可以直接向客戶端回傳回應資訊,或者利用請求轉發或重定向將請求轉向到其它資源,需要注意的是,這個方法的請求和回應引數的型別是ServletRequest和ServletResponse,也就是說,過濾器的使用并不依賴于具體的協議, - 銷毀
Web容器呼叫destroy()方法指示過濾器的生命周期結束,在這個方法中,可以釋放過濾器使用的資源,
過濾器的開發
基于過濾器的核心介面,一個過濾器的開發可以經過下述三個步驟:
- 創建Filter介面實作類,
- 撰寫過濾器的功能代碼,
- 對過濾器進行宣告配置,
過濾器的應用
在Web開發中,Filter是非常重要而且實用的技術,其應用非常廣泛,如下為幾種常見的使用情況:
- 做統一的認證處理,
- 對用戶的請求進行檢查和更精確的記錄,
- 監視或對用戶所傳遞的引數做前置處理,例如:防止資料注入攻擊,
- 改變影像檔案的格式,
- 對請求和回應進行編碼,
- 對回應做壓縮處理,
- 對XML的輸出使用XSLT來轉換,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/260606.html
標籤:其他
上一篇:Android實作歡迎界面
