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