




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Web過濾技術(shù)一、 過濾器技術(shù)1、 概述( 1)常規(guī)方式的 Web認證形式對于各種Web訪問的預處理和后處理問題,傳統(tǒng)上 ,開發(fā)人員會設(shè)計一系列額外的檢測程序模塊 ,也就是一整套if/else語句 , 而且指定如果其中任何一個檢測失敗,所有的處理工作都會退出。顯然,這種方法是存在很大弊端的,即代碼的可讀性、可維護性都會被大大降低 ,同時將檢測工作融于一般的程序模塊,使得整個程序的模塊性難以保證( 因為我們這里所說的預處理和后處理功能,一般是指一些基本的系統(tǒng)服務(wù),如安全、登錄 ,系統(tǒng)調(diào)試等。執(zhí)行這些功能的過濾器一般是需要與核心模塊分開的,而且由于系統(tǒng)職能或規(guī)則的變化 ,這些模塊隨時可能被添加或刪
2、除) 。( 2)典型的 Web應(yīng)用的需求首先假設(shè)我們現(xiàn)在想做一個Web Application(例如 BBS) 。要求具備下列功能 :在用戶發(fā)帖子之前 ,要進行身份認證 ,以確認該用戶是已登陸用戶。其次是要對刪除帖子 ,修改帖子 ,進行權(quán)限檢查。訪問特定資源 ( Web 頁、 JSP 頁) 時的身份認證那么對待這些要求我們該怎么去做,如果在每個頁面中都寫檢查權(quán)限的代碼,不是一個好想法 ,且使的程序的可重用性降低,對比設(shè)計模式Intercepting Filter(截獲過濾 )正好符合 我們的 要求 ,且 在 Servlet2.3中 經(jīng)過使用過濾器 (Filter)能夠 使得 WebApplic
3、ation開發(fā)者能夠在請求到達Web資源之前截取請求 ,在處理請求之后修改應(yīng)答。( 3)模塊化的解決方法解決這種問題的關(guān)鍵在于,設(shè)計一種簡單的技術(shù) ,以能夠添加或移除額外處理的模塊,而這些模塊一般都能夠完成一定的檢測和過濾功能。根據(jù)以上的討論, J2EE 研究人員提出了設(shè)計模式 -截取過濾器作為解決方案,這種模式能夠在不影響核心處理模塊的情況下,實現(xiàn)可插入的過濾器來執(zhí)行一般的處理功能。( 4) Web 應(yīng)用中的過濾器及作用Web應(yīng)用中的過濾器截取從客戶端的請求,并做出處理的答復。利用它能夠?qū)崿F(xiàn)驗證客戶是否來自可信的網(wǎng)絡(luò)(以處理一個網(wǎng)站的所有客戶請求并提供一個核心的認證機制) 、資料內(nèi)容僅供您學
4、習參考,如有不當或者侵權(quán),請聯(lián)系改正或者刪除。能夠?qū)蛻籼峤坏臄?shù)據(jù)進行重新編碼、 能夠驗證客戶是否已經(jīng)登錄、 能夠檢查客戶的瀏覽器是否滿足本應(yīng)用的要求并能夠產(chǎn)生系統(tǒng)日志等應(yīng)用。Servlet過濾器是可插入的Web 組件 ,它允許我們實現(xiàn)Web 應(yīng)用程序中的預處理和后期處理邏輯 ( 也就是說它對于客戶的請求附加了額外的操作 ) 。過濾器支持 Servlet 和 JSP 頁面的基本請求處理功能 , 比如日志記錄、 性能、 安全、 會話處理、 XSLT 轉(zhuǎn)換等。主要為 :( 5)資源訪問 ( Web 頁、 JSP 頁、 servlet)的定制身份認證應(yīng)用程序級的訪問資源的審核和記錄應(yīng)用程序范圍內(nèi)對資
5、源的加密訪問,它建立在定制的加密方案基礎(chǔ)上對被訪問資源的及時轉(zhuǎn)換,包括從 servlet和 JSP 的動態(tài)輸出截取過濾器的不足采用這種設(shè)計模式也會帶來一定的問題 , 即在過濾器之間共享信息將變得非常困難 , 這是由于根據(jù)其定義和需求 , 每個過濾器的設(shè)計和開發(fā)都大相徑庭。因而如果在不同的過濾器之間需要共享信息的話 , 其代價將是非常昂貴的。因為過濾器是獨立運行的部件 , 也就是除了輸入和輸出外 , 每個過濾器不受任何其它過濾器運行的影響。在設(shè)計上 , 過濾器之間不共享任何狀態(tài)信息 ; 獨立性還表現(xiàn)在它對其處理的上游和下游連接的過濾器是 無知 的。它的設(shè)計和使用不對與其連接的任何過濾器施加限制
6、, 唯一關(guān)心的是其輸入數(shù)據(jù)的 , 然后進行加工處理 , 最后產(chǎn)生數(shù)據(jù)輸出。2、 Servlet過濾器技術(shù)( 1) Servlet過濾器是什么 ?Servlet過濾器是小型的Web 組件 ,它們攔截請求和響應(yīng) ,以便查看、 提取或以某種方式操作正在客戶機和服務(wù)器之間交換的數(shù)據(jù)。過濾器是一般封裝了一些功能的Web 組件 ,這些功能雖然很重要 ,可是對于處理客戶機請求或發(fā)送響應(yīng)來說不是決定性的。典型的例子包括記錄關(guān)于請求和響應(yīng)的數(shù)據(jù)、處理安全協(xié)議、管理會話屬性等等。過濾器提供一種面向?qū)ο蟮哪K化機制,用以將公共任務(wù)封裝到可插入的組件中,這些組件經(jīng)過一個配置文件來聲明,并動態(tài)地處理。資料內(nèi)容僅供您學習
7、參考,如有不當或者侵權(quán),請聯(lián)系改正或者刪除。( 2) Servlet過濾器的特性聲明式的 :過濾器經(jīng)過 Web 部署描述符 ( web.xml)中的 XML 標簽來聲明。這樣允許添加和刪除過濾器 ,而無需改動任何應(yīng)用程序代碼或JSP 頁面。動態(tài)的 :過濾器在運行時由Servlet容器調(diào)用來攔截和處理請求和響應(yīng)。靈活的 :過濾器在 Web 處理環(huán)境中的應(yīng)用很廣泛 , 涵蓋諸如日志記錄和安全等許多最公共的輔助任務(wù)。過濾器還是靈活的 , 因為它們可用于對來自客戶機的直接調(diào)用執(zhí)行預處理和后期處理 , 以及處理在防火墻之后的 Web 組件之間調(diào)度的請求。最后 , 能夠?qū)⑦^濾器鏈接起來以提供必須的功能。模
8、塊化的 :經(jīng)過把應(yīng)用程序處理邏輯封裝到單個類文件中 , 過濾器從而定義了可容易地從請求/ 響應(yīng)鏈中添加或刪除的模塊化單元。可移植的 :與 Java平臺的其它許多方面一樣, Servlet過濾器是跨平臺和跨容器可移植的,從而進一步支持了Servler過濾器的模塊化和可重用本質(zhì)??芍赜玫?:歸功于過濾器實現(xiàn)類的模塊化設(shè)計,以及聲明式的過濾器配置方式,過濾器能夠容易地跨越不同的項目和應(yīng)用程序使用。透明的 :資料內(nèi)容僅供您學習參考,如有不當或者侵權(quán),請聯(lián)系改正或者刪除。在請求 / 響應(yīng)鏈中包括過濾器 , 這種設(shè)計是為了補充 ( 而不是以任何方式替代 ) servlet 或 JSP 頁面提供的核心處理。
9、因而 , 過濾器能夠根據(jù)需要添加或刪除 , 而不會破壞servlet或JSP頁面。3、 過濾器 (filters)( 1) Servlet API 2.3的新特性Servlet API 2.3中最重大的改變是增加了filters, filters能夠傳遞request或者修改 response 。Filters并不是servlets;它們不能產(chǎn)生response 。 你能夠把過濾器看作是還沒有到達servlet的 request的預處理器,或從servlet發(fā)出的response的后處理器。過濾器是一個程序 ,它先于與之相關(guān)的servlet或 JSP頁面運行在服務(wù)器上。過濾器可附加到一個或多個
10、servlet或 JSP頁面上 ,而且能夠檢查進入這些資源的請求信息。( 2) filter的主要作用訪問日志記錄對于到達系統(tǒng)的所有請求,過濾器收集諸如瀏覽器類型、一天中的時間、轉(zhuǎn)發(fā)URL 等相關(guān)信息 ,并對它們進行日志記錄。利用修改過的請求信息調(diào)用資源過濾器在內(nèi)容經(jīng)過線路傳來并在到達servlet和 JSP 頁面之前解壓縮該內(nèi)容,然后再取得響應(yīng)內(nèi)容 ,并在將響應(yīng)內(nèi)容發(fā)送到客戶機機器之前將它轉(zhuǎn)換為壓縮格式。調(diào)用或者阻止資源調(diào)用等安全方面過濾器處理身份驗證令牌的管理 , 并適當?shù)叵拗瓢踩Y源的訪問 , 提示用戶進行身份驗證和 / 或?qū)⑺齻冎敢降谌竭M行身份驗證。將安全邏輯放在過濾器中 , 而不
11、是放在 servlet 或者 JSP 頁面中 , 這樣提供了巨大的靈活性。在開發(fā)期間 , 過濾器能夠關(guān)閉 ( 在 web.xml 文件中注釋掉 ) 。在生產(chǎn)應(yīng)用中 , 過濾器又能夠再次啟用。另外還能夠添加多個過濾器 , 以便根據(jù)需要提高安全、 加密和不可拒絕的服務(wù)的等級。會話處理將 servlet 和 JSP 頁面與會話處理代碼混雜在一起可能會帶來相當大的麻煩。使用過濾器來管理會話能夠讓 Web 頁面集中精力考慮內(nèi)容顯示和委托處理 , 而不必擔資料內(nèi)容僅供您學習參考,如有不當或者侵權(quán),請聯(lián)系改正或者刪除。心會話管理的細節(jié)。( 3) Servlet 2.3規(guī)范中的過濾器過濾器在Servlet 2
12、.3規(guī)范中首次引入時,它們只能過濾Web客戶機和客戶機所訪問的指定Web資源之間的內(nèi)容。如果該資源然后將請求調(diào)度給其它Web資源 ,那就不能向幕后委托的任何請求應(yīng)用過濾器。Servlet2.4規(guī)范消除了這個限制。Servlet過濾器現(xiàn)在能夠應(yīng)用于J2EE Web 環(huán)境中存在請求和響應(yīng)對象的任何地方。因此, Servlet過濾器能夠應(yīng)用在客戶機和servlet之間、servlet和servlet或JSP頁面之間,以及所包括的每個JSP頁面之間。這才是我所稱的強大能力和靈活性!( 4) javax.servlet包中的3 個接口Filter、FilterChain和FilterConfig從編 程
13、的 角度看,過濾器 類將 實現(xiàn)Filter接口,然后使用這個過濾器類中的FilterChain和FilterConfig接口。該過濾器類的一個引用將傳遞給FilterChain對象 ,以允許過濾器把控制權(quán)傳遞給鏈中的下一個資源。FilterConfig對象將由容器提供給過濾器,以允許訪問該過濾器的初始化數(shù)據(jù)。( 5) Filter接口該接口主要實現(xiàn)了以下方法:public void init(FilterConfig filterConfig)throws ServletException這個方法在容器實例化過濾器時首先被調(diào)用,它主要設(shè)計用于使過濾器為處理做準備。該方法接受一個FilterCo
14、nfig類型的對象作為輸入。而且利用它能獲取在web.xml文件中指定的 filter初始化參數(shù)。public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws java.io.IOException,ServletException與servlet擁有一個service()方法 (這個方法又調(diào)用doPost()或者doGet()來處理請求一樣,過濾器擁有單個用于處理請求和響應(yīng)的方法doFilter()。這個方法接受三個輸入?yún)?shù):一個ServletRequest、resp
15、onse和一個FilterChain對象。利用該方法執(zhí)行實際的過濾的操作,因為它是一個完成過濾行為的方法;同時它也是上一個過濾器調(diào)用的方法。引入的FilterChain對象參數(shù)的主要目的是為了向后續(xù)的過濾器提供所要調(diào)用的信息。資料內(nèi)容僅供您學習參考,如有不當或者侵權(quán),請聯(lián)系改正或者刪除。public void destroy():容器在銷毀過濾器實例前被調(diào)用,在其中能夠釋放資源。( 6) Filter鏈介紹過濾器鏈 :所有過濾器都服從調(diào)用的過濾器鏈,并經(jīng)過定義明確的接口得到執(zhí)行。Web 應(yīng)用程序能夠指定許多過濾器來完成相關(guān)的工作,那么它們就組成一個過濾器鏈來完成相應(yīng)的工作。過濾器鏈的結(jié)構(gòu)圖do
16、Filter()方法每個request和response都會傳到filter接口的doFilter()方法中 ,也就是說在FilterChain對象中包含著所有將被執(zhí)行的filters。一個 filter 能夠在 doFilter() 方法中對 request 和過調(diào)用其它的方法獲得數(shù)據(jù) , 或賦予獲得的對象新的行為response 進行處理。 ( 它能夠經(jīng)),然后 ,當前的filter調(diào)用chain.doFilter()方法把控制權(quán)傳遞給下一個filter。在調(diào)用返回時 , filter能夠在doFilter()方法結(jié)束的地方,對response進行附加的處理,例如 ,對response進行
17、日志管理。如果filter想停止request處理過程并獲得對response的完全控制,則不要去調(diào)用下一個filter。因此過濾器能夠:在請求得到處理以前修改請求的標題提供它自己的請求版本以供處理在請求處理以后和被傳回給用戶以前修改響應(yīng)先取得由容器進行的所有請求處理,并產(chǎn)生自己的響應(yīng)4、 編程實現(xiàn)過濾器的步驟:建立一個過濾器涉及下列五個步驟:( 1)建立一個實現(xiàn)Filter接口的類。這個類需要三個方法,分別是 :doFilter- doFilter方法包含主要的過濾代碼資料內(nèi)容僅供您學習參考,如有不當或者侵權(quán),請聯(lián)系改正或者刪除。init- init方法建立設(shè)置操作init方法只在此過濾器第
18、一次初始化時執(zhí)行,不是每次調(diào)用過濾器都執(zhí)行它。對于簡單的過濾器 ,可提供此方法的一個空體。但有兩個原因需要使用init。首先 , FilterConfig對象提供對 servlet 環(huán)境及 web.xml 文件中指派的過濾器名的訪問。因此 ,普遍的辦法是利用 init將 FilterConfig對象存放在一個字段中 , 以便 doFilter方法能夠訪問 servlet環(huán)境或過濾器名。其次 , FilterConfig對象具有一個 getInitParameter方法 , 它能夠訪問部署描述符文件 ( web.xml)中分配的過濾器初始化參數(shù)。destroy-而 destroy 方法進行清除。此方法在利用一個給定的過濾器對象永久地終止服務(wù)器( 如關(guān)閉服務(wù)器 ) 時調(diào)用。大多數(shù)過濾器簡單地為此方法提供一個空體,不過 ,可利用它來完成諸如關(guān)閉過濾器使用的文件或數(shù)據(jù)庫連接池等清除任務(wù)。( 2)在 doFilte
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 預防醫(yī)學護理課件
- 項目管理課件
- 2025年電視節(jié)目自動播出設(shè)備項目發(fā)展計劃
- 2025年高純低羥基石英玻璃項目建議書
- 湘教版四年級上冊全冊音樂教案
- 2025年群路密碼機系列合作協(xié)議書
- 2025年HB步進電機合作協(xié)議書
- 2025年自裝卸補給車項目合作計劃書
- 文化會展服務(wù)行業(yè)概述
- 農(nóng)村一二三產(chǎn)業(yè)融合發(fā)展的農(nóng)村旅游產(chǎn)品創(chuàng)新與鄉(xiāng)村旅游目的地競爭力提升策略報告
- 河南省鄭州市2024-2025學年高一下期期末考試數(shù)學試卷
- 急救護理培訓結(jié)業(yè)測試題庫
- 2025安全生產(chǎn)月主題宣講課件十:主要負責人安全公開課
- 加氣站氣瓶充裝質(zhì)量保證體系手冊2024版
- 2025新人教版七下英語單詞默寫表
- 2025年中核匯能有限公司招聘筆試參考題庫含答案解析
- (正式版)SHT 3046-2024 石油化工立式圓筒形鋼制焊接儲罐設(shè)計規(guī)范
- 電子級磷酸簡介
- 臨床pcr檢驗標本的處理保存及核酸提取方法課件
- 隱蔽工程驗收記錄(地基與基礎(chǔ))
- (完整版)BrownBear繪本附配音
評論
0/150
提交評論