最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring中的Filter過(guò)濾器詳解

 更新時(shí)間:2023年08月12日 10:14:40   作者:dbligf6561  
這篇文章主要介紹了Spring中的Filter過(guò)濾器詳解,Filter 程序是一個(gè)實(shí)現(xiàn)了特殊接口的 Java 類,與 Servlet 類似,也是由 Servlet 容器進(jìn)行調(diào)用和執(zhí)行的,需要的朋友可以參考下

一、Filter基本工作原理

1、Filter 程序是一個(gè)實(shí)現(xiàn)了特殊接口的 Java 類,與 Servlet 類似,也是由 Servlet 容器進(jìn)行調(diào)用和執(zhí)行的。

2、當(dāng)在 web.xml 注冊(cè)了一個(gè) Filter 來(lái)對(duì)某個(gè) Servlet 程序進(jìn)行攔截處理時(shí),它可以決定是否將請(qǐng)求繼續(xù)傳遞給 Servlet 程序,以及對(duì)請(qǐng)求和響應(yīng)消息是否進(jìn)行修改。

3、當(dāng) Servlet 容器開(kāi)始調(diào)用某個(gè) Servlet 程序時(shí),如果發(fā)現(xiàn)已經(jīng)注冊(cè)了一個(gè) Filter 程序來(lái)對(duì)該 Servlet 進(jìn)行攔截,那么容器不再直接調(diào)用 Servlet 的 service 方法,而是調(diào)用 Filter 的 doFilter 方法,再由 doFilter 方法決定是否去激活 service 方法。

4、但在 Filter.doFilter 方法中不能直接調(diào)用 Servlet 的 service 方法,而是調(diào)用 FilterChain.doFilter 方法來(lái)激活目標(biāo) Servlet 的 service 方法,F(xiàn)ilterChain 對(duì)象時(shí)通過(guò) Filter.doFilter 方法的參數(shù)傳遞進(jìn)來(lái)的。

5、只要在 Filter.doFilter 方法中調(diào)用 FilterChain.doFilter 方法的語(yǔ)句前后增加某些程序代碼,這樣就可以在 Servlet 進(jìn)行響應(yīng)前后實(shí)現(xiàn)某些特殊功能。

6、如果在 Filter.doFilter 方法中沒(méi)有調(diào)用 FilterChain.doFilter 方法,則目標(biāo) Servlet 的 service 方法不會(huì)被執(zhí)行,這樣通過(guò) Filter 就可以阻止某些非法的訪問(wèn)請(qǐng)求。

二、Filter鏈

1、在一個(gè) Web 應(yīng)用程序中可以注冊(cè)多個(gè) Filter 程序,每個(gè) Filter 程序都可以對(duì)一個(gè)或一組 Servlet 程序進(jìn)行攔截。如果有多個(gè) Filter 程序都可以對(duì)某個(gè) Servlet 程序的訪問(wèn)過(guò)程進(jìn)行攔截,當(dāng)針對(duì)該 Servlet 的訪問(wèn)請(qǐng)求到達(dá)時(shí),Web 容器將把這多個(gè) Filter 程序組合成一個(gè) Filter 鏈(也叫過(guò)濾器鏈)。

2、Filter 鏈中的各個(gè) Filter 的攔截順序與它們?cè)?web.xml 文件中的映射順序一致,上一個(gè) Filter.doFilter 方法中調(diào)用 FilterChain.doFilter 方法將激活下一個(gè) Filter的doFilter 方法,最后一個(gè) Filter.doFilter 方法中調(diào)用的 FilterChain.doFilter 方法將激活目標(biāo) Servlet的service 方法。

3、只要 Filter 鏈中任意一個(gè) Filter 沒(méi)有調(diào)用 FilterChain.doFilter 方法,則目標(biāo) Servlet 的 service 方法都不會(huì)被執(zhí)行。

三、Filter接口

一個(gè) Filter 程序就是一個(gè) Java 類,這個(gè)類必須實(shí)現(xiàn) Filter 接口。javax.servlet.Filter 接口中定義了三個(gè)方法:init、doFilter、destory。

1、init 方法

(1)在 Web 應(yīng)用程序啟動(dòng)時(shí),Web 服務(wù)器(Web 容器)將根據(jù)其 web.xml 文件的配置信息來(lái)創(chuàng)建每個(gè)注冊(cè)的 Filter 的實(shí)例對(duì)象,并將其保存在內(nèi)存中。

(2)Web 容器創(chuàng)建 Filter 的實(shí)例對(duì)象后,將立即調(diào)用該 Filter 對(duì)象的 init 方法。init 方法在 Filter 生命周期中僅被執(zhí)行一次,Web 容器在調(diào)用 init 方法時(shí),會(huì)傳遞一個(gè)包含 Filter 的配置和運(yùn)行環(huán)境信息的 FilterConfig 對(duì)象。

public voic init(FilterConfig filterConfig) throws ServletException

(3)開(kāi)發(fā)人員可以在 init 方法中完成與構(gòu)造方法類似的初始化功能,要注意的是:如果初始化代碼要使用到 FilterConfig 對(duì)象,這些代碼只能在 init 方法中編寫(xiě),而不能在構(gòu)造方法中編寫(xiě)(尚未調(diào)用 init 方法,即并沒(méi)有創(chuàng)建 FilterConfig 對(duì)象,要使用它則必然出錯(cuò))。

2、doFilter 方法

當(dāng)一個(gè) Filter 對(duì)象能夠攔截訪問(wèn)請(qǐng)求時(shí),Servlet 容器將調(diào)用 Filter 對(duì)象的 doFilter 方法。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException.ServletException

其中,參數(shù) request 和 response 為 Web 容器或 Filter 鏈中上一個(gè) Filter 傳遞過(guò)來(lái)的請(qǐng)求和響應(yīng)對(duì)象;參數(shù) chain 為代表當(dāng)前 Filter 鏈的對(duì)象。

3、destroy 方法

該方法在 Web 容器卸載 Filter 對(duì)象之前被調(diào)用,也僅執(zhí)行一次。

可以完成與 init 方法相反的功能,釋放被該 Filter 對(duì)象打開(kāi)的資源

例如:關(guān)閉數(shù)據(jù)庫(kù)連接和 IO 流。

四、FilterChain接口

該接口用于定義一個(gè) Filter 鏈的對(duì)象應(yīng)該對(duì)外提供的方法,這個(gè)接口只定義了一個(gè) doFilter 方法。

public void doFilter(ServletRequest request, ServletResponse response) throws java.io.IOException.ServletException

FilterChain 接口的 doFilter 方法用于通知 Web 容器把請(qǐng)求交給 Filter 鏈中的下一個(gè) Filter 去處理

如果當(dāng)前調(diào)用此方法的 Filter 對(duì)象是Filter 鏈中的最后一個(gè) Filter,那么將把請(qǐng)求交給目標(biāo) Servlet 程序去處理。

五、FilterConfig 接口

1、與普通的 Servlet 程序一樣,F(xiàn)ilter 程序也很可能需要訪問(wèn) Servlet 容器。Servlet 規(guī)范將代表 ServletContext 對(duì)象和 Filter 的配置參數(shù)信息都封裝到一個(gè)稱為 FilterConfig 的對(duì)象中。

2、FilterConfig 接口則用于定義 FilterConfig 對(duì)象應(yīng)該對(duì)外提供的方法,以便在 Filter 程序中可以調(diào)用這些方法來(lái)獲取 ServletContext 對(duì)象,以及獲取在 web.xml 文件中為 Filter 設(shè)置的友好名稱和初始化參數(shù)。

3、FilterConfig接口定義的各個(gè)方法:

  • getFilterName 方法,返回 <filter-name> 元素的設(shè)置值。
  • getServletContext 方法,返回 FilterConfig 對(duì)象中所包裝的 ServletContext 對(duì)象的引用。
  • getInitParameter 方法,用于返回在 web.xml 文件中為 Filter 所設(shè)置的某個(gè)名稱的初始化的參數(shù)值。
  • getInitParameterNames 方法,返回一個(gè) Enumeration 集合對(duì)象。

到此這篇關(guān)于Spring中的Filter過(guò)濾器詳解的文章就介紹到這了,更多相關(guān)Spring的Filter內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis-plus @DS實(shí)現(xiàn)動(dòng)態(tài)切換數(shù)據(jù)源原理

    mybatis-plus @DS實(shí)現(xiàn)動(dòng)態(tài)切換數(shù)據(jù)源原理

    本文主要介紹了mybatis-plus @DS實(shí)現(xiàn)動(dòng)態(tài)切換數(shù)據(jù)源原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Java程序數(shù)據(jù)庫(kù)連接滿問(wèn)題的排查指南

    Java程序數(shù)據(jù)庫(kù)連接滿問(wèn)題的排查指南

    這篇文章主要介紹了Java應(yīng)用數(shù)據(jù)庫(kù)連接滿問(wèn)題的識(shí)別、診斷、原因排查及解決方案,提出通過(guò)監(jiān)控、代碼優(yōu)化、配置調(diào)整和預(yù)防措施,結(jié)合Arthas等工具,有效應(yīng)對(duì)和預(yù)防該問(wèn)題,需要的朋友可以參考下
    2025-07-07
  • SpringBoot使用Feign調(diào)用其他服務(wù)接口

    SpringBoot使用Feign調(diào)用其他服務(wù)接口

    這篇文章主要介紹了SpringBoot使用Feign調(diào)用其他服務(wù)接口,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 淺談Java中幾個(gè)常用集合添加元素的效率

    淺談Java中幾個(gè)常用集合添加元素的效率

    下面小編就為大家?guī)?lái)一篇淺談Java中幾個(gè)常用集合添加元素的效率。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • java單例五種實(shí)現(xiàn)模式解析

    java單例五種實(shí)現(xiàn)模式解析

    這篇文章主要介紹了java單例五種實(shí)現(xiàn)模式解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java基礎(chǔ)之final關(guān)鍵字作用案例

    Java基礎(chǔ)之final關(guān)鍵字作用案例

    這篇文章主要介紹了Java基礎(chǔ)之final關(guān)鍵字作用案例,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • MybatisPlus插件自動(dòng)維護(hù)更新和創(chuàng)建時(shí)間方式

    MybatisPlus插件自動(dòng)維護(hù)更新和創(chuàng)建時(shí)間方式

    這篇文章主要介紹了MybatisPlus插件自動(dòng)維護(hù)更新和創(chuàng)建時(shí)間方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • springboot中通過(guò)lua腳本來(lái)獲取序列號(hào)的方法

    springboot中通過(guò)lua腳本來(lái)獲取序列號(hào)的方法

    這篇文章主要介紹了springboot中通過(guò)lua腳本來(lái)獲取序列號(hào)的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • java實(shí)現(xiàn)簡(jiǎn)單掃雷游戲

    java實(shí)現(xiàn)簡(jiǎn)單掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 枚舉java語(yǔ)言中的修飾符組合的實(shí)例代碼

    枚舉java語(yǔ)言中的修飾符組合的實(shí)例代碼

    這篇文章主要介紹了枚舉java語(yǔ)言中的修飾符組合,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07

最新評(píng)論

安徽省| 泸州市| 五华县| 通化市| 涪陵区| 竹北市| 盘山县| 修水县| 弋阳县| 临沂市| 延津县| 改则县| 拜泉县| 安达市| 定兴县| 黎川县| 逊克县| 固安县| 平安县| 泰州市| 汽车| 浮山县| 中超| 康乐县| 民和| 聂荣县| 阳信县| 龙门县| 江阴市| 和平区| 玉林市| 扎鲁特旗| 化隆| 南乐县| 革吉县| 石城县| 梁河县| 闵行区| 昭通市| 四子王旗| 阳新县|