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