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)有用戶(hù)訪問(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中Filter過(guò)濾器處理中文亂碼的方法
- java 過(guò)濾器filter防sql注入的實(shí)現(xiàn)代碼
- javaweb中Filter(過(guò)濾器)的常見(jiàn)應(yīng)用
- JavaWeb之Filter過(guò)濾器詳解
- Java中使用Filter過(guò)濾器的方法
- Java Web Filter 過(guò)濾器學(xué)習(xí)教程(推薦)
- JavaWeb Servlet中Filter過(guò)濾器的詳解
- JavaWeb中過(guò)濾器Filter的用法詳解
- 淺談Java中的Filter過(guò)濾器
- 一文詳解JavaWeb過(guò)濾器(Filter)
相關(guān)文章
Java面試題沖刺第四天--數(shù)據(jù)庫(kù)
這篇文章主要為大家分享了最有價(jià)值的三道數(shù)據(jù)庫(kù)面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下2021-07-07springcloud gateway設(shè)置context-path的操作
這篇文章主要介紹了springcloud gateway設(shè)置context-path的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07IDEA在一個(gè)項(xiàng)目空間下管理多個(gè)項(xiàng)目的操作方法
這篇文章主要介紹了IDEA如何在一個(gè)項(xiàng)目空間下管理多個(gè)項(xiàng)目,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04Java 使用Socket正確讀取數(shù)據(jù)姿勢(shì)
這篇文章主要介紹了Java 使用Socket正確讀取數(shù)據(jù)姿勢(shì),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Java刪除指定文件夾下的所有內(nèi)容的方法(包括此文件夾)
下面小編就為大家?guī)?lái)一篇Java刪除指定文件夾下的所有內(nèi)容的方法(包括此文件夾) 。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12java基礎(chǔ)篇之Date類(lèi)型最常用的時(shí)間計(jì)算(相當(dāng)全面)
這篇文章主要給大家介紹了關(guān)于java基礎(chǔ)篇之Date類(lèi)型最常用的時(shí)間計(jì)算的相關(guān)資料,Java中的Date類(lèi)是用來(lái)表示日期和時(shí)間的類(lèi),它提供了一些常用的方法來(lái)處理日期和時(shí)間的操作,需要的朋友可以參考下2023-12-12Mybatis 自動(dòng)映射(使用需謹(jǐn)慎)
這篇文章主要介紹了Mybatis 自動(dòng)映射(使用需謹(jǐn)慎),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10SpringBoot?整合?Quartz?定時(shí)任務(wù)框架詳解
這篇文章主要介紹了SpringBoot整合Quartz定時(shí)任務(wù)框架詳解,Quartz是一個(gè)完全由Java編寫(xiě)的開(kāi)源作業(yè)調(diào)度框架,為在Java應(yīng)用程序中進(jìn)行作業(yè)調(diào)度提供了簡(jiǎn)單卻強(qiáng)大的機(jī)制2022-08-08微信小程序后端Java接口開(kāi)發(fā)的詳細(xì)步驟
現(xiàn)在微信小程序越來(lái)越火了,相信不少人都通過(guò)各種途徑學(xué)習(xí)過(guò)微信小程序或者嘗試開(kāi)發(fā),本文就介紹了微信小程序后端Java接口開(kāi)發(fā)的詳細(xì)步驟,感興趣的同學(xué)可以學(xué)習(xí)一下2021-11-11