Java過(guò)濾器Filter詳解
Filter學(xué)習(xí)
Filter功能
- 攔截jsp、靜態(tài)圖片文件、靜態(tài)html資源文件
- 實(shí)現(xiàn)URL級(jí)別的權(quán)限訪問(wèn)控制
- 過(guò)濾敏感詞匯
- 壓縮相應(yīng)信息
Filter的工作原理
看源碼可以看出來(lái),F(xiàn)ilter接口中有3個(gè)方法:init、doFilter、destory

init方法,初始化Filter,F(xiàn)ilter在服務(wù)器啟動(dòng)階段被實(shí)例化。并且調(diào)用init方法,init方法只執(zhí)行一次,因?yàn)镕ilter只被實(shí)例化一次。
destory方法也好理解,就是銷(xiāo)毀Filter,釋放內(nèi)存,在運(yùn)行結(jié)束時(shí)調(diào)用此方法當(dāng)。長(zhǎng)時(shí)間沒(méi)有用戶訪問(wèn),或者項(xiàng)目重新部署,或者服務(wù)器重新啟動(dòng)的時(shí)候,會(huì)銷(xiāo)毀所有的Filter對(duì)象,銷(xiāo)毀之前會(huì)先調(diào)用Filter對(duì)象的destroy方法,完成銷(xiāo)毀前的準(zhǔn)備工作。也是只執(zhí)行一次。
doFilter方法提供給開(kāi)發(fā)者重寫(xiě)過(guò)濾邏輯。
多個(gè)Filter的實(shí)現(xiàn)
public class AFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("輸出filter2的init方法");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest) servletRequest;
System.out.println("輸出filter2的doFilter方法之前");
filterChain.doFilter(request, response);
System.out.println("輸出filter2的doFilter方法之后");
}
@Override
public void destroy() {
System.out.println("輸出filter2的destroy方法");
}
}
public class BFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("輸出filter1的init方法");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest) servletRequest;
System.out.println("輸出filter1的doFilter方法之前");
filterChain.doFilter(request, response);
System.out.println("輸出filter1的doFilter方法之后");
}
@Override
public void destroy() {
System.out.println("輸出filter1的destroy方法");
}
}
配置Filter的過(guò)濾順序,通過(guò)setOrder方法執(zhí)行FilterChain的順序,數(shù)字越小,優(yōu)先級(jí)越高。
@Configuration
public class WebConfig {
@Bean
public FilterRegistrationBean filter1() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
AFilter aFilter = new AFilter();
filterRegistrationBean.setFilter(aFilter);
filterRegistrationBean.setOrder(1);
return filterRegistrationBean;
}
@Bean
public FilterRegistrationBean filter2() {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
BFilter bFilter = new BFilter();
filterRegistrationBean.setFilter(bFilter);
filterRegistrationBean.setOrder(2);
return filterRegistrationBean;
}
}
Filter的執(zhí)行邏輯

總結(jié)
本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
- 傳智播客java web 過(guò)濾器
- java 過(guò)濾器filter防sql注入的實(shí)現(xiàn)代碼
- javaweb中Filter(過(guò)濾器)的常見(jiàn)應(yīng)用
- java servlet過(guò)濾器使用示例
- 一個(gè)簡(jiǎn)單的JAVA字符集過(guò)濾器實(shí)現(xiàn)
- Java中的攔截器、過(guò)濾器、監(jiān)聽(tīng)器用法詳解
- Java Filter 過(guò)濾器詳細(xì)介紹及實(shí)例代碼
- Java Web實(shí)現(xiàn)session過(guò)期后自動(dòng)跳轉(zhuǎn)到登陸頁(yè)功能【基于過(guò)濾器】
- Java中AuthorizationFilter過(guò)濾器的功能
相關(guān)文章
java使用POI讀取properties文件并寫(xiě)到Excel的方法
這篇文章主要介紹了java使用POI讀取properties文件并寫(xiě)到Excel的方法,涉及java操作properties文件及Excel文件的相關(guān)技巧,需要的朋友可以參考下2015-06-06
Idea?springboot?springCloud熱加載熱調(diào)試兩種常用方式
這篇文章主要介紹了Idea?springboot?springCloud熱加載熱調(diào)試常用的兩種方式,在項(xiàng)目開(kāi)發(fā)的過(guò)程中,需要修改調(diào)試的時(shí)候偶每次都需要重啟項(xiàng)目浪費(fèi)時(shí)間,下面是我整理的兩種常用的兩種方式,需要的朋友可以參考下2023-04-04
Java數(shù)據(jù)結(jié)構(gòu)順序表從零基礎(chǔ)到精通進(jìn)階
程序中經(jīng)常需要將一組數(shù)據(jù)元素作為整體管理和使用,需要?jiǎng)?chuàng)建這種元素組,用變量記錄它們,傳進(jìn)傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個(gè)數(shù)可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲(chǔ)區(qū)里,元素間的順序關(guān)系由它們的存儲(chǔ)順序自然表示2022-03-03
Spring FreeMarker整合Struts2過(guò)程詳解
這篇文章主要介紹了Spring FreeMarker整合Struts2過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10
Java8之lambda最佳實(shí)踐_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
在8 里面Lambda是最火的主題,不僅僅是因?yàn)檎Z(yǔ)法的改變,更重要的是帶來(lái)了函數(shù)式編程的思想,我覺(jué)得優(yōu)秀的程序員,有必要學(xué)習(xí)一下函數(shù)式編程的思想以開(kāi)闊思路2017-06-06
使用java編程從0到1實(shí)現(xiàn)一個(gè)簡(jiǎn)單計(jì)算器
這篇文章主要介紹了使用java編程從0到1實(shí)現(xiàn)一個(gè)簡(jiǎn)單計(jì)算器,文章中用代碼實(shí)例講解的很清晰,有感興趣的同學(xué)可以學(xué)習(xí)研究下2021-02-02

