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

Java中過濾器和攔截器的區(qū)別有哪些

 更新時間:2025年09月12日 08:27:30   作者:伯恩bourne  
過濾器和攔截器非常相似,但是它們有很大的區(qū)別,這篇文章主要介紹了Java中過濾器和攔截器的區(qū)別有哪些的相關(guān)資料,文中介紹的非常詳細,需要的朋友可以參考下

前言

在 Spring Boot 中,過濾器(Filter)和攔截器(Interceptor)都用于處理請求和響應(yīng),但它們在實現(xiàn)機制、作用范圍和使用場景上有明顯區(qū)別,主要體現(xiàn)在以下幾個方面:

1.技術(shù)本質(zhì)不同

  • 過濾器(Filter)
    是 Java Servlet 規(guī)范定義的組件,屬于 Servlet 容器層面的技術(shù),不依賴 Spring 框架。
    基于函數(shù)回調(diào)實現(xiàn),工作在 Web 容器的請求處理鏈最外層,可以攔截所有進入容器的請求(包括靜態(tài)資源、JSP 等)。

  • 攔截器(Interceptor)
    是 Spring 框架自身定義的組件,依賴 Spring 容器,屬于 Spring MVC 層面的技術(shù)。
    基于 Java 反射(AOP 思想)實現(xiàn),僅能攔截 Spring MVC 處理的請求(即通過 DispatcherServlet 分發(fā)的請求)。

2.執(zhí)行時機不同

請求處理流程中,兩者的執(zhí)行順序如下:請求進入容器 → Filter 攔截 → DispatcherServlet 分發(fā) → Interceptor 攔截 → Controller 處理 → Interceptor 后置處理 → Filter 后置處理 → 響應(yīng)返回

  • Filter:在請求到達 DispatcherServlet 之前執(zhí)行,且在響應(yīng)返回客戶端前最后執(zhí)行。
  • Interceptor:在 DispatcherServlet 之后、Controller 之前執(zhí)行,且在 Controller 處理完成后、視圖渲染前后還有對應(yīng)的回調(diào)方法。

3.攔截范圍不同

  • Filter:可攔截所有請求(如 .html、.css.js 等靜態(tài)資源,以及非 Spring MVC 處理的請求)。
  • Interceptor:僅攔截 Spring MVC 管理的請求(即通過 @Controller@RestController 定義的接口),對靜態(tài)資源、直接訪問的 JSP 等不生效。

4.注入能力不同

  • Filter:由 Servlet 容器管理生命周期,默認情況下無法直接注入 Spring 容器中的 Bean(需通過特殊配置才能獲取 Spring 上下文)。
  • Interceptor:由 Spring 容器管理,可直接注入 Spring 中的 Bean(如 Service、Repository 等),便于使用 Spring 的功能。

5.方法回調(diào)不同

  • Filter:核心方法是 doFilter(ServletRequest, ServletResponse, FilterChain),通過 FilterChain.doFilter() 放行請求,僅有請求前響應(yīng)后兩個處理時機。
  • Interceptor:提供三個核心方法:
    • preHandle():Controller 執(zhí)行前調(diào)用(返回 true 放行,false 攔截)。
    • postHandle():Controller 執(zhí)行后、視圖渲染前調(diào)用。
    • afterCompletion():視圖渲染完成后、響應(yīng)返回前調(diào)用(無論是否異常都會執(zhí)行)。

6.使用場景不同

  • Filter:適合處理與 Servlet 容器相關(guān)的通用邏輯,如:

    • 編碼轉(zhuǎn)換(如統(tǒng)一設(shè)置 UTF-8)。
    • 跨域請求處理(CORS 配置)。
    • 敏感字符過濾、請求日志記錄(包括靜態(tài)資源)。
    • 身份驗證(如基于 Session 的登錄校驗)。
  • Interceptor:適合處理與 Spring MVC 相關(guān)的業(yè)務(wù)邏輯,如:

    • 權(quán)限精細校驗(結(jié)合 Spring Security 或自定義權(quán)限邏輯)。
    • 業(yè)務(wù)日志記錄(僅針對接口請求)。
    • 接口性能監(jiān)控(記錄請求處理時間)。
    • 事務(wù)管理相關(guān)的預(yù)處理/后處理。

書中的關(guān)于過濾器和攔截器的區(qū)別?

(1)使用范圍不同:Filter是Servlet規(guī)范規(guī)定的,只能用于web程序中。而攔截器既可以用于web程序,也可以用于Application、swing程序中。

(2)規(guī)范不同:Filter是在servlet規(guī)范中定義的,是Servlet容器支持的,而攔截器是在spring容器內(nèi)的,是spring框架支持的。

(3)使用的資源不同:同其他的代碼塊一樣,攔截器也是一個spring的組件,歸spring管理,配置在spring文件中,因此能使用spring里的任何資源,獨享。例如service對象、數(shù)據(jù)源、事務(wù)管理等,通過IOC注入到攔截器即可;而Filter不能。

(4)深度不同:Filter只在Servlet前后起作用。而攔截器能深入到方法前后、異常拋出前后等。因此攔截器的使用靈活性更大。所以在Spring為基礎(chǔ)的構(gòu)架的程序中,優(yōu)先使用攔截器。

總結(jié)

  • 過濾器是 Servlet 級別的“全局攔截”,適合處理容器層面的通用邏輯,不依賴 Spring。
  • 攔截器是 Spring MVC 級別的“業(yè)務(wù)攔截”,適合處理與 Spring 集成的業(yè)務(wù)邏輯,功能更靈活。

實際開發(fā)中,兩者可配合使用(如 Filter 處理編碼和跨域,Interceptor 處理接口權(quán)限)。

到此這篇關(guān)于Java中過濾器和攔截器的區(qū)別有哪些的文章就介紹到這了,更多相關(guān)Java過濾器和攔截器區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何實現(xiàn)Spring?Event(異步事件)

    如何實現(xiàn)Spring?Event(異步事件)

    這篇文章主要介紹了如何實現(xiàn)Spring?Event(異步事件)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • JavaMail實現(xiàn)帶附件的郵件發(fā)送

    JavaMail實現(xiàn)帶附件的郵件發(fā)送

    這篇文章主要為大家詳細介紹了JavaMail實現(xiàn)帶附件的郵件發(fā)送,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • springboot前后端分離集成CAS單點登錄(統(tǒng)一認證)

    springboot前后端分離集成CAS單點登錄(統(tǒng)一認證)

    單點登錄是一種身份認證和授權(quán)技術(shù),允許用戶在多個應(yīng)用系統(tǒng)中使用同一套用戶名和密碼進行登錄,本文主要介紹了springboot前后端分離集成CAS單點登錄,具有一定的參考價值,感興趣的可以了解一下
    2024-09-09
  • 使用SpringBoot注解方式處理事務(wù)回滾實現(xiàn)

    使用SpringBoot注解方式處理事務(wù)回滾實現(xiàn)

    這篇文章主要介紹了使用SpringBoot注解方式處理事務(wù)回滾實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-08-08
  • 在JDK和Eclipse下如何編寫和運行Java Applet

    在JDK和Eclipse下如何編寫和運行Java Applet

    本文主要介紹了在JDK和Eclipse的環(huán)境下如何編寫和運行Java Applet,圖文方式,適合初學(xué)者學(xué)習。
    2015-09-09
  • java樹形菜單對象生成

    java樹形菜單對象生成

    這篇文章主要為大家詳細介紹了java樹形菜單對象生成,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Jenkins的安裝與簡單配置過程

    Jenkins的安裝與簡單配置過程

    本文簡述Jenkins在CentOS7.3上安裝流程,包括Java環(huán)境配置、RPM包安裝、修改JENKINS_HOME路徑及權(quán)限、啟動服務(wù)、插件安裝與系統(tǒng)管理設(shè)置,重點說明郵件通知、SCM工具和Docker插件的配置方法,并附參考鏈接
    2025-08-08
  • Java編程接口調(diào)用的作用及代碼分享

    Java編程接口調(diào)用的作用及代碼分享

    這篇文章主要介紹了Java編程接口調(diào)用的作用及代碼分享,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • java Split 實現(xiàn)去除一個空格和多個空格

    java Split 實現(xiàn)去除一個空格和多個空格

    這篇文章主要介紹了java Split 實現(xiàn)去除一個空格和多個空格,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • java判斷ip是否為指定網(wǎng)段示例

    java判斷ip是否為指定網(wǎng)段示例

    這篇文章主要介紹了java判斷ip是否為指定網(wǎng)段示例方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10

最新評論

濮阳市| 手机| 霍州市| 韶山市| 彰武县| 云南省| 乡城县| 龙泉市| 德令哈市| 大石桥市| 桐庐县| 大冶市| 巴楚县| 白山市| 酉阳| 安阳市| 翁源县| 怀柔区| 古田县| 苍溪县| 工布江达县| 宝鸡市| 邵东县| 新平| 桃江县| 夏津县| 浙江省| 罗源县| 周宁县| 宾川县| 光泽县| 沧州市| 高要市| 句容市| 尼玛县| 扶沟县| 乐亭县| 瑞丽市| 聂拉木县| 木兰县| 三台县|