亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring中的Filter過濾器詳解

 更新時(shí)間:2023年08月12日 10:14:40   作者:dbligf6561  
這篇文章主要介紹了Spring中的Filter過濾器詳解,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 來對(duì)某個(gè) Servlet 程序進(jìn)行攔截處理時(shí),它可以決定是否將請(qǐng)求繼續(xù)傳遞給 Servlet 程序,以及對(duì)請(qǐng)求和響應(yīng)消息是否進(jìn)行修改。

3、當(dāng) Servlet 容器開始調(diào)用某個(gè) Servlet 程序時(shí),如果發(fā)現(xiàn)已經(jīng)注冊(cè)了一個(gè) Filter 程序來對(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 方法來激活目標(biāo) Servlet 的 service 方法,F(xiàn)ilterChain 對(duì)象時(shí)通過 Filter.doFilter 方法的參數(shù)傳遞進(jìn)來的。

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

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

二、Filter鏈

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

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 沒有調(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 文件的配置信息來創(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)開發(fā)人員可以在 init 方法中完成與構(gòu)造方法類似的初始化功能,要注意的是:如果初始化代碼要使用到 FilterConfig 對(duì)象,這些代碼只能在 init 方法中編寫,而不能在構(gòu)造方法中編寫(尚未調(diào)用 init 方法,即并沒有創(chuàng)建 FilterConfig 對(duì)象,要使用它則必然出錯(cuò))。

2、doFilter 方法

當(dāng)一個(gè) Filter 對(duì)象能夠攔截訪問請(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 傳遞過來的請(qǐng)求和響應(yīng)對(duì)象;參數(shù) chain 為代表當(dāng)前 Filter 鏈的對(duì)象。

3、destroy 方法

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

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

例如:關(guān)閉數(shù)據(jù)庫連接和 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 程序也很可能需要訪問 Servlet 容器。Servlet 規(guī)范將代表 ServletContext 對(duì)象和 Filter 的配置參數(shù)信息都封裝到一個(gè)稱為 FilterConfig 的對(duì)象中。

2、FilterConfig 接口則用于定義 FilterConfig 對(duì)象應(yīng)該對(duì)外提供的方法,以便在 Filter 程序中可以調(diào)用這些方法來獲取 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ān)Spring的Filter內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Spring中的AOP及AspectJ五大通知注解

    詳解Spring中的AOP及AspectJ五大通知注解

    這篇文章主要介紹了詳解Spring中的AOP及AspectJ五大通知注解,AOP面向切面編程是一種新的方法論,是對(duì)傳統(tǒng)OOP面向?qū)ο缶幊痰难a(bǔ)充,AOP?的主要編程對(duì)象是切面(aspect),切面模塊化橫切關(guān)注點(diǎn),需要的朋友可以參考下
    2023-08-08
  • Spring Boot實(shí)現(xiàn)發(fā)送郵件

    Spring Boot實(shí)現(xiàn)發(fā)送郵件

    這篇文章主要為大家詳細(xì)介紹了Spring Boot實(shí)現(xiàn)發(fā)送郵件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Java匿名類和匿名函數(shù)的概念和寫法

    Java匿名類和匿名函數(shù)的概念和寫法

    匿名函數(shù)寫法和匿名類寫法的前提必須基于函數(shù)式接口匿名函數(shù)寫法和匿名類寫法其本質(zhì)是同一個(gè)東西,只是簡(jiǎn)化寫法不同使用Lambda表達(dá)式簡(jiǎn)寫匿名函數(shù)時(shí),可以同時(shí)省略實(shí)現(xiàn)類名、函數(shù)名,這篇文章主要介紹了Java匿名類和匿名函數(shù)的概念和寫法,需要的朋友可以參考下
    2023-06-06
  • Java實(shí)現(xiàn)SHA1加密代碼實(shí)例

    Java實(shí)現(xiàn)SHA1加密代碼實(shí)例

    這篇文章給大家分享了Java實(shí)現(xiàn)SHA1加密的相關(guān)實(shí)例代碼,有興趣的朋友可以測(cè)試參考下。
    2018-07-07
  • java使用sigar 遇到問題的快速解決方法

    java使用sigar 遇到問題的快速解決方法

    下面小編就為大家?guī)硪黄猨ava使用sigar 遇到問題的快速解決方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • Spring?Boot?整合持久層之MyBatis

    Spring?Boot?整合持久層之MyBatis

    在實(shí)際開發(fā)中不僅僅是要展示數(shù)據(jù),還要構(gòu)成數(shù)據(jù)模型添加數(shù)據(jù),這篇文章主要介紹了SpringBoot集成Mybatis操作數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • SpringBoot中使用?POI的示例代碼

    SpringBoot中使用?POI的示例代碼

    這篇文章主要介紹了SpringBoot中使用POI的實(shí)例詳解,包括引入poi的jar包和創(chuàng)建excel的實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • JAVA 多線程之信號(hào)量(Semaphore)實(shí)例詳解

    JAVA 多線程之信號(hào)量(Semaphore)實(shí)例詳解

    這篇文章主要介紹了JAVA 多線程之信號(hào)量(Semaphore)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • SpringBoot整合Mybatis Generator自動(dòng)生成代碼

    SpringBoot整合Mybatis Generator自動(dòng)生成代碼

    SpringBoot 整合 Mybatis Generator自動(dòng)生成dao、entity、mapper.xml實(shí)現(xiàn)單表增刪改查。文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • 完美解決Logback configuration error detected的問題

    完美解決Logback configuration error detected的問題

    這篇文章主要介紹了完美解決Logback configuration error detected的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評(píng)論