版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
JavaWeb應(yīng)用開發(fā)計算機與軟件學院第7章使用過濾器實現(xiàn)用戶授權(quán)驗證■本章要點:
Servlet過濾器開發(fā)技術(shù)用戶授權(quán)驗證功能模塊設(shè)計與實現(xiàn)
Servlet過濾器技術(shù)特性分析
Servlet過濾器的典型應(yīng)用7.1使用Servlet過濾器實現(xiàn)
用戶授權(quán)驗證功能■用戶登錄驗證功能分析Session中留下相應(yīng)的用戶對象作為標識每個頁面或Servlet中都添加身份驗證的代碼顯然會對編程造成很大的麻煩,也會增加多余的代碼。而Servlet過濾器可以截取從客戶端發(fā)送到服務(wù)器的請求,并作出處理答復(fù)。7.1使用Servlet過濾器實現(xiàn)
用戶授權(quán)驗證功能■過濾器應(yīng)用控制流程如下圖
7.1使用Servlet過濾器實現(xiàn)
用戶授權(quán)驗證功能■Servlet過濾器實現(xiàn)一創(chuàng)建過濾器SessionFilter,通過NEW命令創(chuàng)建一個Class文件,配置如下
7.1使用Servlet過濾器實現(xiàn)
用戶授權(quán)驗證功能■Servlet過濾器實現(xiàn)二在doFilter方法中放入過濾行為:HttpServletRequest
httpreq=(HttpServletRequest)request;
HttpServletResponse
httpres=(HttpServletResponse)response;
HttpServletResponseWrapperwrapper=newHttpServletResponseWrapper((Http-ServletResponse)response);//通過配置參數(shù)對象config獲取配置信息中的初始化參數(shù)“l(fā)oginstrings”(需要過濾的頁面)StringloginStrings=config.getInitParameter("logonStrings");//獲取配置信息中的初始化參數(shù)“includeStrings”(需要過濾的頁面?。㏒tringincludeStrings=config.getInitParameter("includeStrings");//沒有登錄則需要重定向到的頁面StringredirectPath=httpreq.getContextPath()+config.getInitParameter("redirectPath");…7.1使用Servlet過濾器實現(xiàn)
用戶授權(quán)驗證功能■Servlet過濾器實現(xiàn)三調(diào)用FilterChain對象的doFilter方法:
chain.doFilter(request,response);
7.1使用Servlet過濾器實現(xiàn)
用戶授權(quán)驗證功能■Servlet過濾器實現(xiàn)四對相應(yīng)的servlet和JSP頁面注冊過濾器。在部署描述符文件(web.xml)中使用filter和filter-mapping元素。7.1.3Servlet過濾器技術(shù)特性分析■Servlet過濾器工作原理圖
7.1.3Servlet過濾器技術(shù)特性分析■Servlet過濾器使用注意
提示:在過濾器截獲響應(yīng)對象的時候,如果輸出流被servlet關(guān)閉了,那么過濾器就不能夠再改變輸出流中的響應(yīng)信息。在servlet的實現(xiàn)中,用刷新輸出流,不能夠關(guān)閉輸出流。如:
PrintWriterout=response.getPrintWriter();
…out.flush();//如果希望有過濾器截獲并處理響應(yīng)信息,此處不能用out.close()代替out.flush()。7.1.3Servlet過濾器技術(shù)特性分析■Servlet過濾器鏈工件原理7.1.3Servlet過濾器技術(shù)特性分析■創(chuàng)建Servlet過濾器和實現(xiàn)其編程接口
1、建立一個實現(xiàn)Filter接口的類publicclassSessionFilterimplementsFilter所有過濾器都必須實現(xiàn)javax.servlet.Filter。這個接口包含三個方法,分別為doFilter、init和destroy。7.1.3Servlet過濾器技術(shù)特性分析■創(chuàng)建Servlet過濾器和實現(xiàn)其編程接口
2、將過濾行為放入doFilter方法
doFilter方法為過濾器的關(guān)鍵。每當調(diào)用一個過濾器時,都要執(zhí)行doFilter。
doFilter執(zhí)行的步驟是基于傳入的信息的。因此,要利用作為doFilter的參數(shù)提供的ServletRequest。常用的是HttpServletRequest類型7.1.3Servlet過濾器技術(shù)特性分析■創(chuàng)建Servlet過濾器和實現(xiàn)其編程接口
3、調(diào)用FilterChain對象的doFilter方法
Filter接口的doFilter方法以一個FilterChain對象作為第三個參數(shù)。在調(diào)用該對象的doFilter方法時,激活下一個相關(guān)的過濾器。這個過程一般持續(xù)到鏈中最后一個過濾器為止。在最后一個過濾器調(diào)用其FilterChain對象的doFilter方法時,激活請求資源(Servlet或JSP頁面等)。7.1.3Servlet過濾器技術(shù)特性分析■創(chuàng)建Servlet過濾器和實現(xiàn)其編程接口
4、部署過濾器過濾器是Web組件 部署描述符文件的兩個用于過濾器的元素:filter和filter-mappingfilter:過濾器定義
<filter>元素中又包含兩個必要的子元素<filter-name>和<filter-class>,用來定義過濾器的名稱一與過濾器相關(guān)的java類的路徑,還包含四個子元素<init-parm>、<icon>、<display-name>和<descryiption>filter-mapping:過濾器的映射配置 過濾器的映射配置可以利用過濾器映射到一個或多個Servlet和Jsp文件中,也可以映射到任意的URL中7.2servlet過濾器知識總結(jié)■Servlet過濾器的優(yōu)點以一種模塊化的或可重用的方式封裝公共的行為能夠?qū)⒏呒壴L問決策與表現(xiàn)代碼相分離能夠?qū)υS多不同的資源進行批量性的更改
提示:過濾器只在與servlet規(guī)范2.3版兼容的服務(wù)器上有作用。7.3字符編碼過濾器packagecom.filter;publicclassEncodingFilterimplementsFilter{protectedFilterConfigfilterConfig;privateStringtargetEncoding="gb2312";//初始化過濾器,和一般的Servlet一樣,它也可以獲得初始參數(shù)。publicvoidinit(FilterConfigconfig)throwsServletException{this.filterConfig=config;
//從配置文件中獲得字符編碼格式
this.targetEncoding=config.getInitParameter("encoding");}//銷毀過濾器publicvoiddestroy(){this.filterConfig=null;}7.3字符編碼過濾器
//進行過濾處理,這個方法最重要,所有過濾處理的代碼都在此實現(xiàn)。publicvoiddoFilter(ServletRequestsrequest,ServletResponsesresponse,FilterChainchain)throwsIOException,ServletException{System.out.println("使用以下方法對請求進行編碼:encoding="+targetEncoding);HttpServletRequestrequest=(HttpServletRequest)srequest;//設(shè)置字符編碼格式request.setCharacterEncoding(targetEncoding);//把處理權(quán)發(fā)送到下一個
chain.doFilter(srequest,sresponse);}publicvoidsetFilterConfig(finalFilterConfigfilterConfig){this.filterConfig=filterConfig;}}7.3字符編碼過濾器在web.xml中進行過濾器注冊和參數(shù)配置,具體配置信息如下:<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.5"xmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_2_5.xsd"><filter><filter-name>encoding</filter-name><filter-class>com.filter.EncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>gb2312</param-value></init-param></filter><filter-mapping><filter-name>encoding</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>第7章使用過濾器實現(xiàn)用戶授權(quán)驗證■思考題簡述過濾器的基本編寫過程。如果不使用過濾器實現(xiàn)用戶授權(quán)驗證功能,我們可以用什么技術(shù)來達到同樣的“用戶授權(quán)驗證”功能?請使用過濾器實現(xiàn)用戶訪問權(quán)限控制。例如:后臺管理用戶使用的JSP文件放在Admin文件夾中,只有后臺登錄的用戶才可以訪問,前臺登錄用戶不能訪問!請編寫過濾器來實現(xiàn)?JavaWeb應(yīng)用開發(fā)計算機與軟件學院
第8章使用監(jiān)聽器實現(xiàn)在線人數(shù)統(tǒng)計■本章要點:
Servlet監(jiān)聽器開發(fā)技術(shù)在線人數(shù)統(tǒng)計功能模塊設(shè)計與實現(xiàn)Servlet監(jiān)聽器技術(shù)特性分析Servlet監(jiān)聽器的典型應(yīng)用8.1使用Servlet監(jiān)聽器實現(xiàn)在線人數(shù)統(tǒng)計■在線人數(shù)統(tǒng)計功能分析在系統(tǒng)運行過程中,了解當前使用系統(tǒng)的用戶,有多少人在使用系統(tǒng)?具體又是哪些人在使用系統(tǒng)?實現(xiàn):session監(jiān)聽器javax.servlet.http.HttpSessionListener接口ServletContext監(jiān)聽器javax.servlet.ServletContextListener接口8.1使用Servlet監(jiān)聽器實現(xiàn)在線人數(shù)統(tǒng)計■Servlet監(jiān)聽器實現(xiàn)
第一步:創(chuàng)建監(jiān)聽器類OnlineCount.java,通過NEW命令創(chuàng)建一個Class文件,準備實現(xiàn)ServletContextListener、HttpsessionListener接口的監(jiān)聽處理器類8.1使用Servlet監(jiān)聽器實現(xiàn)在線人數(shù)統(tǒng)計■Servlet監(jiān)聽器實現(xiàn)
生成處理器類代碼如下:publicclassOnlineCountimplementsServletContextListener,HttpSessionListener{publicvoidcontextInitialized(ServletContextEventsce){
//應(yīng)用程序初始化時啟動}publicvoidcontextDestroyed(ServletContextEventsce){//應(yīng)用程序卸載時啟動}publicvoidsessionCreated(HttpSessionEventse){//當有用戶訪問時啟動}publicvoidsessionDestroyed(HttpSessionEventse){//當有用戶退出時啟動}}8.1使用Servlet監(jiān)聽器實現(xiàn)在線人數(shù)統(tǒng)計■Servlet監(jiān)聽器實現(xiàn)
第二步:為監(jiān)聽行為添加代碼:
1)為用戶訪問監(jiān)聽行為添加代碼:publicvoidsessionCreated(HttpSessionEventse){HttpSessionsession=se.getSession();ServletContextcontext=session.getServletContext();Integercounter=(Integer)context.getAttribute("counter");counter=newInteger(Value()+1);//在線人數(shù)增1context.setAttribute("counter",counter);}8.1使用Servlet監(jiān)聽器實現(xiàn)在線人數(shù)統(tǒng)計■Servlet監(jiān)聽器實現(xiàn)
第二步:為監(jiān)聽行為添加代碼:2)為用戶退出監(jiān)聽行為添加代碼:publicvoidsessionDestroyed(HttpSessionEventse){HttpSessionsession=se.getSession();ServletContextcontext=session.getServletContext();Integercounter=(Integer)context.getAttribute("counter");counter=newInteger(Value()-1);//在線人數(shù)減1context.setAttribute("counter",counter);}8.1使用Servlet監(jiān)聽器實現(xiàn)在線人數(shù)統(tǒng)計■Servlet監(jiān)聽器實現(xiàn)
第二步:為監(jiān)聽行為添加代碼:3)為應(yīng)用程序初始化添加代碼:publicvoidcontextInitialized(ServletContextEventsce){ServletContextcontext=sce.getServletContext();Integercounter=newInteger(0);context.setAttribute("counter",counter);//初始化在線人數(shù)計數(shù)器}8.1使用Servlet監(jiān)聽器實現(xiàn)在線人數(shù)統(tǒng)計■Servlet監(jiān)聽器實現(xiàn)
第二步:為監(jiān)聽行為添加代碼:4)為應(yīng)用程序卸載添加代碼:publicvoidcontextDestroyed(ServletContextEventsce){ServletContextcontext=sce.getServletContext();context.removeAttribute("counter");//刪除在線人數(shù)計數(shù)器}8.1使用Servlet監(jiān)聽器實現(xiàn)在線人數(shù)統(tǒng)計■Servlet監(jiān)聽器實現(xiàn)
第三步:將session監(jiān)聽器配置到web.xml配置文件中:…<listener><listener-class>our.OnlineCount</listener-class></listener>…8.1使用Servlet監(jiān)聽器實現(xiàn)在線人數(shù)統(tǒng)計■Servlet監(jiān)聽器實現(xiàn)
第四步:顯示在線用戶的監(jiān)聽結(jié)果在需要顯示的JSP頁面frameLeft.jsp中加入如下代碼:<td><fontcolor=“orange”>在線人數(shù)
<%if(application.getAttribute("counter")!=null){%><%=application.getAttribute("counter")%><%}else{%>1<%}%></font></td>8.1使用Servlet監(jiān)聽器實現(xiàn)在線人數(shù)統(tǒng)計■Servlet監(jiān)聽器實現(xiàn)
顯示效果如下圖所示:8.1.3Servlet監(jiān)聽器技術(shù)特性分析■Servlet事件監(jiān)聽器簡介與Java的GUI事件監(jiān)聽器類似 按監(jiān)聽的對象劃分:
1.監(jiān)聽應(yīng)用程序環(huán)境對象(ServletContext)事件
2.監(jiān)聽用戶會話對象(HttpSession)事件
3.監(jiān)聽請求對象(ServletRequest)事件按監(jiān)聽的事件類劃分:
1.用于監(jiān)聽對象自身的創(chuàng)建和銷毀的事件監(jiān)聽器
2.用于監(jiān)聽對象中的屬性的增加和刪除的事件監(jiān)聽器
3.用于監(jiān)聽綁定到HttpSession中的某個對象的狀態(tài)的事件監(jiān)聽器8.1.3Servlet監(jiān)聽器技術(shù)特性分析■監(jiān)聽對象的創(chuàng)建、屬性和改變和銷毀
在一個web應(yīng)用程序的整個運行周期內(nèi),web容器會創(chuàng)建和銷毀三個重要的對象,ServletContext,HttpSession,ServletRequest。在servlet2.4規(guī)范中定義了三個接口:
●ServletContextListener●HttpSessionListener●ServletRequestListener
8.1.3Servlet監(jiān)聽器技術(shù)特性分析■監(jiān)聽對象的創(chuàng)建、屬性和改變和銷毀
1.在ServletContextListener接口:publicvoidcontextInitialized(ServletcontextEventsce)
應(yīng)用程序部署時激發(fā);可以通過事件對象參數(shù)獲得當前被創(chuàng)建的ServletContext對象publicvoidcontextDestroyed(ServletContextEventsce)
應(yīng)用程序卸載時激發(fā);可以通過事件對象參數(shù)獲得當前被卸載的ServletContext對象。8.1.3Servlet監(jiān)聽器技術(shù)特性分析■監(jiān)聽域?qū)ο蟮膭?chuàng)建、屬性和改變和銷毀
2.在HttpSessionListneter接口:publicvoidsessionCreated(HttpSessionEventse)
創(chuàng)建一個新的Session對象時激發(fā);通過參數(shù)獲得當前被創(chuàng)建的HttpSession對象publicvoidsessionDestroyed(HttpSessionEventse)
容器銷毀一個Session對象時激發(fā);通過參數(shù)獲得當前被銷毀的HttpSession對象8.1.3Servlet監(jiān)聽器技術(shù)特性分析■監(jiān)聽域?qū)ο蟮膭?chuàng)建、屬性和改變和銷毀
3.在ServletRequestListener接口:publicvoidrequestInitialized(ServletRequestEventsre)容器創(chuàng)建一個新的Request請求對象時激發(fā);通過參數(shù)獲得當前被創(chuàng)建的ServletRequest對象。publicvoidrequestDestroyed(ServletRequestEventsre)
容器銷毀一個Request請求對象時激發(fā);通過參數(shù)獲得當前被銷毀的ServletRequest對象。8.2servlet監(jiān)聽器知識總結(jié)■Servlet監(jiān)聽器介紹
監(jiān)視和控制web應(yīng)用狀態(tài)的變化。
Servlet監(jiān)聽器是web應(yīng)用程序事件模型的一部分,當web應(yīng)用中的某些狀態(tài)發(fā)生變化時,Servlet容器將產(chǎn)生相應(yīng)的事件,此時監(jiān)聽器來接收和處理這些事件。
在Servlet2.4中有8個監(jiān)聽器,6個事件,ServletContext事件監(jiān)聽器、HTTPSession事件監(jiān)聽器和ServletRequest事件監(jiān)聽器。8.2servlet監(jiān)聽器知識總結(jié)■Servlet監(jiān)聽器8.2servlet監(jiān)聽器知識總結(jié)■Servlet上下文監(jiān)聽
1、ServletContextListener編程接口:“Web應(yīng)用程序的生命周期方法”。contextInitialized(ServletContextEventevent)
應(yīng)用程序被加載及初始化時激發(fā)contextDestoryed(ServletContextEventevent)
應(yīng)用程序被載出,即關(guān)閉時激發(fā)8.2servlet監(jiān)聽器知識總結(jié)■Servlet上下文監(jiān)聽2、ServletAttributeListener編程接口:attributeAdded(ServletContextAttributeEventevent)
如果有對象被加入Application時激發(fā)attributeReplaced(ServletContextAttributeEventevent)
如果在Application內(nèi)有對象取代另一個對象時激發(fā)attributeRemoved(ServletContextAttributeEventevent)
如果有對象被從Application移除時激發(fā)8.2servlet監(jiān)聽器知識總結(jié)■HTTP會話監(jiān)聽
1、HttpSessionListener編程接口:sessionCreated(HttpSessionEventevent)
創(chuàng)建新的Session對象時被激發(fā)。sessionDestoryed(HttpSessionEventevent)Session對象被銷毀時激發(fā)注:HttpSessionEvent類的主要方法:getSession(),可以使用此方法回傳一個Session對象。8.2servlet監(jiān)聽器知識總結(jié)■HTTP會話監(jiān)聽
2、HttpSessionAttributeListener
編程接口:attributeeAdded(HttpSessionBindingEventevent)
有對象被加入Session時激發(fā)attributeReplaced(HttpSessionBindingEventevent)
在Session,有對象取代另一個對象時激發(fā)attributeRemoved(HttpSessionBindingEventevent)
有對象從Session內(nèi)被移除時激發(fā)注:HttpSessionBindingEvent類主要有三個方法:getName()、getsession()、getValues()。8.2se
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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è)技術(shù)學院《電能計量技術(shù)》2023-2024學年第一學期期末試卷
- 昭通學院《智能終端與移動應(yīng)用開發(fā)》2023-2024學年第一學期期末試卷
- 云南現(xiàn)代職業(yè)技術(shù)學院《傳遞過程導(dǎo)論》2023-2024學年第一學期期末試卷
- 企業(yè)市值管理中財務(wù)透明度的提升策略研究
- DB2201T 64-2024 梅花鹿布魯氏菌病膠體金免疫層析檢測方法
- 職業(yè)導(dǎo)論-房地產(chǎn)經(jīng)紀人《職業(yè)導(dǎo)論》真題匯編1
- 房地產(chǎn)經(jīng)紀操作實務(wù)-《房地產(chǎn)經(jīng)紀操作實務(wù)》押題密卷2
- 年度培訓工作總結(jié)
- 119消防安全月活動方案
- 二零二五年度廢塑料編織袋回收與再生PE膜合同3篇
- 關(guān)于提升高寒缺氧氣候條件下隊伍綜合救援水平的思考
- 2024年四川省成都市錦江區(qū)中考數(shù)學一診試卷(附答案解析)
- 小學生中醫(yī)藥文化知識科普傳承中醫(yī)文化弘揚國粹精神課件
- ASME材料-設(shè)計許用應(yīng)力
- 吸痰護理操作
- 室內(nèi)燈光設(shè)計總結(jié)報告
- 子宮動脈栓塞術(shù)后的護理
- 五年級數(shù)學(小數(shù)乘法)計算題及答案
- 第十七章-阿法芙·I·梅勒斯的轉(zhuǎn)變理論
- 計算機應(yīng)用技術(shù)專業(yè)匯報課件
- 檔案基礎(chǔ)業(yè)務(wù)培訓課件
評論
0/150
提交評論