摘要:WEB應(yīng)用程序除了通過自身提供的菜單或者是按鈕進(jìn)行WEB頁面的流轉(zhuǎn)外,還可以通過URL輸入框進(jìn)行頁面的流轉(zhuǎn)。這種現(xiàn)象為WEB應(yīng)用程序的設(shè)計(jì)帶來了一定的難度,處理不當(dāng)將會(huì)出現(xiàn)意想不到的錯(cuò)誤。該文通過使用java servlet過濾器技術(shù),xml文檔,實(shí)現(xiàn)對(duì)WEB頁面的訪問控制,可以有效解決上述問題。
關(guān)鍵詞:java servlet;過濾器;自定義標(biāo)簽;xml
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2009)36-10587-03
Controlling WEB by XML and FILTER
ZHANG Qing-hui1, LI Hai-tao2
(1.Communication Department of Naval Headquarters, Beijing 100841, China; 2.Department of Naval Logistical, Beijing 100841, China)
Abstract: This is a direction that Application was deployed in WWW. But, there is very much difference in the form of accessing between Web application and local application. The main difference is that Web application which can be called by inputting URL in browse. Programmer should consider these factors. If did not consider it, it would cause any trouble. The essay introduce some method about servlet filter and xml document, will resolve the question.
Key words: Java servlet; fliter; self-definition tag of jsp; Xml
目前,基于Web客戶端的主要任務(wù)是展現(xiàn)信息內(nèi)容,而HTML語言則是信息展現(xiàn)的最有效載體之一。最初的HTML語言只能在瀏覽器中展現(xiàn)靜態(tài)的文本或圖像信息,人們對(duì)信息豐富性和多樣性的需求。由靜態(tài)技術(shù)向動(dòng)態(tài)技術(shù)的轉(zhuǎn)變成為了Web客戶端技術(shù)演進(jìn)的永恒定律。
當(dāng)動(dòng)態(tài)網(wǎng)頁技術(shù)發(fā)展成熟以后,人們對(duì)WEB應(yīng)用程序的要求越來越復(fù)雜,從而導(dǎo)致了WEB應(yīng)用程序的軟件架構(gòu)越來越復(fù)雜,這時(shí)產(chǎn)生新的問題――WEB應(yīng)用程序的訪問控制。本文只對(duì)最基本的頁面之間的流轉(zhuǎn)進(jìn)行控制,而對(duì)用戶權(quán)限相關(guān)的訪問控制不做介紹。因?yàn)榭梢詮淖罨镜捻撁媪鬓D(zhuǎn)的控制中發(fā)現(xiàn)用戶權(quán)限的控制只是它的一個(gè)子集,當(dāng)WEB應(yīng)用程序的訪問控制設(shè)計(jì)的足夠靈活(與其它功能之間足夠松耦合),就可以修改它,從而達(dá)到實(shí)現(xiàn)用戶權(quán)限的訪問控制。
1 流行的WEB應(yīng)用程序訪問控制
流行的WEB應(yīng)用程序訪問控制可以依賴在每個(gè)頁面(如jsp,asp,php)或者是服務(wù)器邊代碼(如 servlet)中加入訪問控制代碼對(duì)其進(jìn)行控制[1]。這種訪問控制的缺點(diǎn)顯而易見,就是和非訪問控制功能代碼聯(lián)系過于緊密,從而導(dǎo)致訪問控制代碼的可維護(hù)性和通用性低下。隨著應(yīng)用程序功能的增加,這種缺陷更加明顯。針對(duì)當(dāng)前的訪問控制可以得到以下的結(jié)論[2]:
1) 訪問控制的粒度大小與應(yīng)用程序的復(fù)雜度呈正比;
2) 訪問控制的代碼與應(yīng)用程序的非訪問控制代碼的關(guān)系密切,可維護(hù)性和可重用性差;
3) 訪問控制的真正實(shí)現(xiàn)可能牽涉太多的應(yīng)用模型,導(dǎo)致學(xué)習(xí)成本的提高 [3]。
2 XML構(gòu)成WEB應(yīng)用程序頁面模型
2.1 XML實(shí)現(xiàn)樹型結(jié)構(gòu)
XML(Extensible Markup Language,可擴(kuò)展標(biāo)記語言),是一種用系統(tǒng)無關(guān)的方式表示數(shù)據(jù)的結(jié)構(gòu)化語言。xml文件包括三部分:XML聲明、處理指令(可選)、XML元素。XML文檔的一個(gè)基本要求是結(jié)構(gòu)良好的(well formed),一個(gè)結(jié)構(gòu)良好的XML文檔要包含這三個(gè)部分[4]。下面對(duì)XML進(jìn)行簡單介紹:
1) XML聲明形式 處理指令以結(jié)束。在
2) 處理指令是用來給處理XML文件的應(yīng)用程序提供信息的。所有的處理指令應(yīng)該遵循下面的格式 ,規(guī)則與XML聲明形式相同。
3) XML元素是XML文件內(nèi)容的基本單元。所有的XML元素應(yīng)該遵循下面的格式 <標(biāo)記>數(shù)據(jù)內(nèi)容,元素里還可以再嵌套元素,實(shí)現(xiàn)循環(huán)嵌套。最外層的元素稱為根元素。一個(gè)xml文檔只能有一個(gè)根元素。
可以看出,XML是個(gè)結(jié)構(gòu)良好的樹型層次。那么,將web應(yīng)用程序的頁面之間相互鏈接用XML表示就成了順理成章的事情了。當(dāng)樹型模型被建立后,接下來就是要解決訪問模型的途徑了。本文將通過介紹JAXP(java api for xml processing)實(shí)現(xiàn)對(duì)XML進(jìn)行訪問。
2.2 JAXP 解析 XML
Jaxp是java 操作xml 文檔的工具,其建立在sax和dom(document object model)解析器的基礎(chǔ)之上,自身并不解析xml,僅僅是調(diào)用上述解析器去實(shí)現(xiàn)解析功能。其目的在于使jaxp的代碼與特定的xml解析器無關(guān),易于移植。由于web應(yīng)用程序訪控制的性質(zhì)決定了將會(huì)頻繁訪問該xml文檔,所以本文將采用以dom解析器為基礎(chǔ)的jaxp api 處理xml文檔[5]。
Dom文檔對(duì)象模型是一個(gè)普通的樹狀結(jié)構(gòu)。每個(gè)節(jié)點(diǎn)來自于xml文檔的一個(gè)元素(包含其它元素)或文本(不包含其它元素或xml標(biāo)記)。我們利用jaxp中的相關(guān)api將xml文件轉(zhuǎn)換成dom 對(duì)象,便于使用其它java api 去訪問整個(gè)dom 對(duì)象。過程如下:
1) 導(dǎo)入相關(guān)的java api,主要包括:
javax.xml.parsers.DocumentBuilder;
javax.xml.parsers.DocumentBuilderFactory;
org.w3c.dom.Document;
2) 將xml文檔轉(zhuǎn)換成dom 對(duì)象:
//生成工廠類
DocumentBuildeFactory
factory=DocumentBuildeFactory. newInstance();
//實(shí)例化一個(gè)dom解析器
DocumentBuilde builder= factory.new Docum- entBuilder();
//將xml文檔解析成dom對(duì)象
Document document=builder. Parse(“xml文檔路徑”);
3) dom對(duì)象在訪問控制中的匹配過程:
//訪問dom對(duì)象中的子元素
Element elements=document getDocumentElement ();
//獲得將匹配的元素中所有節(jié)點(diǎn)
NodeList nodelists=get ElementsByTagName(“匹配元素名稱”);
//匹配父節(jié)點(diǎn)名稱是否存在于本節(jié)點(diǎn)允許范圍內(nèi)
Node nodes;
目前為止,已經(jīng)可以使用xml文檔代表一個(gè)web應(yīng)用程序的結(jié)構(gòu)關(guān)系了。并且也實(shí)現(xiàn)了如何匹配一個(gè)父節(jié)點(diǎn)鏈接到本節(jié)點(diǎn)合法性判斷問題。其具體設(shè)計(jì)流程如下所述:
1) web應(yīng)用程序結(jié)構(gòu)示例
如圖1所示,web應(yīng)用程序結(jié)構(gòu)一般存在四個(gè)頁面,index是啟動(dòng)頁面,pageA只存在一個(gè)父頁面(index);pageB存在二個(gè)父頁面(index、pageC);pageC存在二個(gè)父頁面(index、pageB)。
2) 根據(jù)web應(yīng)用程序結(jié)構(gòu)建立xml文檔
/
3 filter實(shí)現(xiàn)web應(yīng)用程序訪問控制
Filter(過濾器)是一個(gè)程序,它先于與之相關(guān)的servlet或JSP頁面運(yùn)行在服務(wù)器上。過濾器可附加到一個(gè)或多個(gè)servlet或JSP頁面上,并且可以檢查進(jìn)入這些資源的請(qǐng)求信息。
3.1 filter 的實(shí)現(xiàn)
在java web service中實(shí)現(xiàn)一個(gè)filter必須執(zhí)行以下基本步驟:
1) 建立一個(gè)實(shí)現(xiàn)Filter接口的類。這個(gè)類需要三個(gè)方法,分別是:doFilter、init和destroy。
2) doFilter方法包含主要的過濾代碼,init方法建立設(shè)置操作,而destroy方法進(jìn)行清除。在doFilter方法中放入過濾行為。doFilter方法的第一個(gè)參數(shù)為ServletRequest對(duì)象。此對(duì)象給過濾器提供了對(duì)進(jìn)入的信息(包括表單數(shù)據(jù)、cookie和HTTP請(qǐng)求頭)的完全訪問。第二個(gè)參數(shù)為ServletResponse,通常在簡單的過濾器中忽略此參數(shù)。最后一個(gè)參數(shù)為FilterChain,如下一步所述,此參數(shù)用來調(diào)用servlet或JSP頁[6]。
3) 調(diào)用FilterChain對(duì)象的doFilter方法。Filter接口的doFilter方法取一個(gè)FilterChain對(duì)象作為它的一個(gè)參數(shù)。在調(diào)用此對(duì)象的doFilter方法時(shí),激活下一個(gè)相關(guān)的過濾器。如果沒有另一個(gè)過濾器與servlet或JSP頁面關(guān)聯(lián),則servlet或JSP頁面被激活。
4) 對(duì)相應(yīng)的servlet和JSP頁面注冊(cè)過濾器。在部署描述符文件(web.xml)中使用filter和filter-mapping元素。
3.2 將xml和filter集成
將xml轉(zhuǎn)換成document對(duì)象的代碼放入filter 接口中的init方法中,init方法僅僅執(zhí)行一次,直到服務(wù)器關(guān)閉為止。再將dom 對(duì)象的匹配過程放在dofilter方法中,當(dāng)匹配成功,就流轉(zhuǎn)到既定頁面;反之,流轉(zhuǎn)到默認(rèn)出錯(cuò)頁面。邏輯過程如圖2所示。
通過xml和filter的集成,對(duì)于web應(yīng)用程序的訪問控制就可以實(shí)現(xiàn)。當(dāng)web應(yīng)用程序的訪問規(guī)則方式變化時(shí),只要對(duì)xml文檔中的內(nèi)容進(jìn)行相應(yīng)的修改即可。在文章開始時(shí)就提到關(guān)于身份用戶權(quán)限相關(guān)的訪問控制是web應(yīng)用程序頁面訪問控制的一個(gè)子集,如何實(shí)現(xiàn)用戶的權(quán)限呢?其實(shí)也只要修改xml文檔的形式即可。
4 結(jié)論
Xml和filter技術(shù)相當(dāng)成熟,通過二者的集成,就可實(shí)現(xiàn)對(duì)程序的控制。本文對(duì)web應(yīng)用程序的訪問控制提出了應(yīng)用級(jí)的解決方案,隨著對(duì)訪問控制的要求不斷增加,應(yīng)該把filter中的控制程序提取出來,形成應(yīng)該業(yè)務(wù)類,而在filter中僅僅對(duì)業(yè)務(wù)類進(jìn)行相應(yīng)的調(diào)用,這時(shí),關(guān)于本文說闡述的web應(yīng)用程序訪問控制才形成模塊??梢钥闯?,做為一個(gè)良好的模塊,應(yīng)該將xml文檔根據(jù)需求進(jìn)行更詳細(xì)的劃分,使其不僅在訪問控制模塊中發(fā)揮作用,而且在用戶管理方面也發(fā)揮作用,最終將web應(yīng)用程序系統(tǒng)管理徹底與業(yè)務(wù)管理分割開來。
參考文獻(xiàn):
[1] 武孟軍.簡單網(wǎng)絡(luò)管理協(xié)議(SNMP)[M].北京:人民郵電出版社,2006.
[2] 張楠,張振國.客戶端/服務(wù)器模式中傳輸層協(xié)議的比較與選擇[J].網(wǎng)絡(luò)與通信,2006,22(9-3):200-202.
[3] 王紹斌,王昭順.信息系統(tǒng)攻擊與防御[M].北京:電子工業(yè)出版社,2007.
[4] 尹建璋.無線局域網(wǎng)網(wǎng)絡(luò)安全措施改進(jìn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(11):2745-2747.
[5] 欒昌海.異構(gòu)網(wǎng)絡(luò)下的Web監(jiān)控系統(tǒng)設(shè)計(jì)研究[J].微計(jì)算機(jī)信,2008,24(7-3):81,101-102.
[6] 吳媛,陳正軍,李雄德.基于SNMP校園網(wǎng)網(wǎng)絡(luò)管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù):學(xué)術(shù)交流,2009,5(15):3925-3926.