public void destroy() {
// TODO Auto-generated method stub
銷(xiāo)毀時(shí)用
}
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
// TODO Auto-generated method stub
處理過(guò)濾代碼
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
初始化時(shí)調用
}
// 1. 創(chuàng )建一個(gè)web項目
// 2. 編寫(xiě)一個(gè)類(lèi)實(shí)現 Filter 接口
// 3. 實(shí)現三個(gè)方法
// 4. 在web.xml中配置Filter參數
// 1
public class MyFilter01 implements Filter {
// 2
@Override
// filter對象初始化方法 filter對象創(chuàng )建時(shí)執行
// 服務(wù)器啟動(dòng)時(shí)就創(chuàng )建該filter對象
public void init(FilterConfig filterConfig) throws ServletException {
// 其中參數config代表 該Filter對象的配置信息的對象,內部封裝是該filter的配置信息
String filterName = filterConfig.getFilterName();
ServletContext servletContext = filterConfig.getServletContext();
String initParameter = filterConfig.getInitParameter("aaa");
}
@Override
// 執行過(guò)濾的核心方法,如果某資源在已經(jīng)被配置到這個(gè)filter進(jìn)行過(guò)濾的話(huà),那么每次訪(fǎng)問(wèn)這個(gè)資源都會(huì )執行doFilter方法
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// ServletRequest/ServletResponse:每次在執行doFilter方法時(shí)
// web容器負責創(chuàng )建一個(gè)request和一個(gè)response對象作為doFilter的參數傳遞進(jìn)來(lái)。
// 該request個(gè)該response就是在訪(fǎng)問(wèn)目標資源的service方法時(shí)的request和response。
// FilterChain:過(guò)濾器鏈對象,通過(guò)該對象的doFilter方法可以放行該請求
System.out.println("filter");
chain.doFilter(request, response);
}
@Override
// filter銷(xiāo)毀方法 當filter對象銷(xiāo)毀時(shí)執行該方法
// 服務(wù)器關(guān)閉時(shí)filter銷(xiāo)毀
public void destroy() {
}
}
// 3 配置
<filter>
<filter-name>Filter01</filter-name>
<;!-- 包名.類(lèi)名 -->
<filter-class>my.filter.MyFilter01</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter01</filter-name>
<;!-- 攔截所有 -->
<url-pattern>/*</url-pattern>
<dispatcher></dispatcher>
</filter-mapping>
1.Distribut-list x inx影響路由表,但不影響LSA 2.Distribut-list x outx既影響路由表,又影響LSA,用于A(yíng)SBR路由重發(fā)。
4.neighbor x.x.x.x database-filter all out在OSPF進(jìn)程中過(guò)濾 neighbor的路由 5.area x filter-list prefix xxx in/out area x 向外通告prefix-list的內容,prefix允許的就通告,其他的濾掉。 附: prefix 最難理解的ge與le的理解:1.1.1.1/8 ge 16 le 32子網(wǎng)掩碼前8位一樣,另外大于16位,小于32位。
建立一個(gè)過(guò)濾器涉及下列五個(gè)步驟:
1、建立一個(gè)實(shí)現Filter接口的類(lèi)。這個(gè)類(lèi)需要三個(gè)方法,分別是:doFilter、init和destroy。doFilter方法包含主要的過(guò)濾代碼,init方法建立設置操作,而destroy方法進(jìn)行清楚。
2、在doFilter方法中放入過(guò)濾行為。doFilter方法的第一個(gè)參數為ServletRequest對象。此對象給過(guò)濾器提供了對進(jìn)入的信息(包括表單數據、cookie和HTTP請求頭)的完全訪(fǎng)問(wèn)。第二個(gè)參數為ServletResponse,通常在簡(jiǎn)單的過(guò)濾器中忽略此參數。最后一個(gè)參數為FilterChain,如下一步所述,此參數用來(lái)調用servlet或JSP頁(yè)。
3、調用FilterChain對象的doFilter方法。Filter接口的doFilter方法取一個(gè)FilterChain對象作為它的一個(gè)參數。在調用此對象的doFilter方法時(shí),激活下一個(gè)相關(guān)的過(guò)濾器。如果沒(méi)有另一個(gè)過(guò)濾器與servlet或JSP頁(yè)面關(guān)聯(lián),則servlet或JSP頁(yè)面被激活。
4、對相應的servlet和JSP頁(yè)面注冊過(guò)濾器。在部署描述符文件(web.xml)中使用filter和filter-mapping元素。
5、禁用激活器servlet。防止用戶(hù)利用缺省servlet URL繞過(guò)過(guò)濾器設置。doFilter方法:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws ServletException, IOException{HttpServletRequest req = (HttpServletRequest)request;
System.out.println(req.getRemoteHost() + " tried to access " +req.getRequestURL() +" on " + new Date() + ".");
chain.doFilter(request,response);
}在web.xml中進(jìn)行部署
分別是:filter和filter-mapping。filter元素向系統注冊一個(gè)過(guò)濾對象,filter-mapping元素指定該過(guò)濾對象所應用的URL。
1.filter元素
filter元素位于部署描述符文件(web.xml)的前部,所有filter-mapping、servlet或servlet-mapping元素之前。filter元素具有如下六個(gè)可能的子元素:
:icon 這是一個(gè)可選的元素,它聲明IDE能夠使用的一個(gè)圖象文件。
:filter-name 這是一個(gè)必需的元素,它給過(guò)濾器分配一個(gè)選定的名字。
:display-name 這是一個(gè)可選的元素,它給出IDE使用的短名稱(chēng)。
:description 這也是一個(gè)可選的元素,它給出IDE的信息,提供文本文檔。
:filter-class 這是一個(gè)必需的元素,它指定過(guò)濾器實(shí)現類(lèi)的完全限定名。
:init-param 這是一個(gè)可選的元素,它定義可利用FilterConfig的getInitParameter方法讀取的初始化參數。單個(gè)過(guò)濾器元素可包含多個(gè)init-param元素。2.filter-mapping元素
filter-mapping元素位于web.xml文件中filter元素之后serlvet元素之前。它包含如下三個(gè)可能的子元素::
:filter-name 這個(gè)必需的元素必須與用filter元素聲明時(shí)給予過(guò)濾器的名稱(chēng)相匹配。
:url-pattern 此元素聲明一個(gè)以斜杠(/)開(kāi)始的模式,它指定過(guò)濾器應用的URL。所有filter-mapping元素中必須提供url-pattern或servlet-name。但不能對單個(gè)filter-mapping元素提供多個(gè)url-pattern元素項。如果希望過(guò)濾器適用于多個(gè)模式,可重復整個(gè)filter-mapping元素。
:servlet-name 此元素給出一個(gè)名稱(chēng),此名稱(chēng)必須與利用servlet元素給予servlet或JSP頁(yè)面的名稱(chēng)相匹配。不能給單個(gè)filter-mapping元素提供多個(gè)servlet-name元素項。
1. Servlet過(guò)濾器基礎
Servlet過(guò)濾器是Servlet的一種特殊用法,主要用來(lái)完成一些通用的操作。比如編碼的過(guò)濾,判斷用戶(hù)的登陸狀態(tài)等等。Servlet過(guò)濾器的適用場(chǎng)合:
A.認證過(guò)濾
B.登錄和審核過(guò)濾
C.圖像轉換過(guò)濾
D.數據壓縮過(guò)濾
E.加密過(guò)濾
F.令牌過(guò)濾
G.資源訪(fǎng)問(wèn)觸發(fā)事件過(guò)濾
Servlet過(guò)濾器接口的構成:
所有的Servlet過(guò)濾器類(lèi)都必須實(shí)現javax.servlet.Filter接口。這個(gè)接口含有3個(gè)過(guò)濾器類(lèi)必須實(shí)現的方法:
方法 說(shuō)明
init(FilterConfig cfg) 這是Servlet過(guò)濾器的初始化方法,性質(zhì)等同與servlet的init方法。
doFilter(ServletRequest,ServletResponse,FilterChain) 完成實(shí)際的過(guò)濾操作,當請求訪(fǎng)問(wèn)過(guò)濾器關(guān)聯(lián)的URL時(shí),Servlet容器將先調用過(guò)濾器的doFilter方法。FilterChain參數用于訪(fǎng)問(wèn)后續過(guò)濾器
destroy() Servlet容器在銷(xiāo)毀過(guò)濾器實(shí)例前調用該方法,這個(gè)方法中可以釋放Servlet過(guò)濾器占用的資源。,性質(zhì)等同與servlet的destory()方法。
Servlet過(guò)濾器的創(chuàng )建步驟:
A.實(shí)現javax.servlet.Filter接口的servlet類(lèi)
B.實(shí)現init方法,讀取過(guò)濾器的初始化函數
C.實(shí)現doFilter方法,完成對請求或過(guò)濾的響應
D.調用FilterChain接口對象的doFilter方法,向后續的過(guò)濾器傳遞請求或響應
F.在web.xml中配置Filter
2.使用過(guò)濾器處理中文問(wèn)題
當用用戶(hù)登陸頁(yè)面輸入帳號時(shí),如果輸入是中文,后臺servlet再次輸出這個(gè)內容時(shí),可能就會(huì )是亂碼,這是因為serlvet中默認是以ISO-8859-1格式編碼的,如果后臺有多個(gè)Servlet,多個(gè)參數,這樣就不合適,這個(gè)問(wèn)題,我們可以通過(guò)一個(gè)過(guò)濾器統一解決,使后臺的輸出輸出都支持中文!將ISO-8859-1轉碼為GBK的那段代碼!
3.使用過(guò)濾器認證用戶(hù):
每個(gè)過(guò)濾器也可以配置初始化參數,可以將不需要過(guò)濾的地址配置到這個(gè)Filter的配置參數中,過(guò)濾時(shí),如果請求地址在配置參數中,則放行,這樣就避免了在程序中硬編碼。每個(gè)Filter中初始化時(shí),都可以得到配置對象,在Filter中配置二個(gè)不需要過(guò)濾的地址,一個(gè)是登陸頁(yè)面,一個(gè)是執行登陸認證的servlet;
====華麗的分割線(xiàn)====
上面是理論知識
下面是實(shí)踐寫(xiě)法
Filter中的三個(gè)方法其實(shí)只寫(xiě)doFilter方法,另外兩個(gè)直接由父類(lèi)實(shí)現即可。
下面給出doFilter方法覆蓋例子:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//執行servlet處理請求響應前需要做的代碼
chain.doFilter(request, response);
//執行servlet處理請求響應后要做的代碼
}
一般我的方法是判斷uri的是不是這三個(gè)如果是這三個(gè),不做處理,直接直接下一步=================唉,直接給你看源碼吧在doFilter方法里寫(xiě)上StringcontextPath=InitObjects.getContextPath();=(HttpServletRequest)request;//獲得用戶(hù)請求的uriStringuri=httpServletRequest.getRequestURI();//eccludedPages是個(gè)List,存放著(zhù)比如index.jsp,error.jsp等不需要過(guò)濾的頁(yè)面if(!excludedPages.contains(uri)){}}filterChain.doFilter(request,response);。
建立一個(gè)過(guò)濾器涉及下列五個(gè)步驟:
1)建立一個(gè)實(shí)現Filter接口的類(lèi)。這個(gè)類(lèi)需要三個(gè)方法,分別是:doFilter、init和destroy。doFilter方法 包含主要的過(guò)濾代碼(見(jiàn)第2步),init方法建立設置操作,而destroy方法進(jìn)行清楚。
2) 在doFilter方法中放入過(guò)濾行為。doFilter方法的第一個(gè)參數為ServletRequest對象。此對象給過(guò)濾器提供了對進(jìn)入的信息(包括 表單數據、cookie和HTTP請求頭)的完全訪(fǎng)問(wèn)。第二個(gè)參數為ServletResponse,通常在簡(jiǎn)單的過(guò)濾器中忽略此參數。最后一個(gè)參數為 FilterChain,如下一步所述,此參數用來(lái)調用servlet或JSP頁(yè)。
3)調用FilterChain對象的doFilter方法。 Filter接口的doFilter方法取一個(gè)FilterChain對象作為它的一個(gè)參數。在調用此對象的doFilter方法時(shí),激活下一個(gè)相關(guān)的過(guò) 濾器。如果沒(méi)有另一個(gè)過(guò)濾器與servlet或JSP頁(yè)面關(guān)聯(lián),則servlet或JSP頁(yè)面被激活。
4)對相應的servlet和JSP頁(yè)面注冊過(guò)濾器。在部署描述符文件(web.xml)中使用filter和filter-mapping元素。
5)禁用激活器servlet。防止用戶(hù)利用缺省servlet URL繞過(guò)過(guò)濾器設置。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:3.214秒