欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

在 Spring Boot 中,過濾器(Filter)和攔截器(Interceptor)都用于處理請求和響應,但它們在實現(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 后置處理 → 響應返回

  • Filter:在請求到達 DispatcherServlet 之前執(zhí)行,且在響應返回客戶端前最后執(zhí)行。
  • Interceptor:在 DispatcherServlet 之后、Controller 之前執(zhí)行,且在 Controller 處理完成后、視圖渲染前后還有對應的回調(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() 放行請求,僅有請求前響應后兩個處理時機。
  • Interceptor:提供三個核心方法:
    • preHandle():Controller 執(zhí)行前調(diào)用(返回 true 放行,false 攔截)。
    • postHandle():Controller 執(zhí)行后、視圖渲染前調(diào)用。
    • afterCompletion():視圖渲染完成后、響應返回前調(diào)用(無論是否異常都會執(zhí)行)。

6.使用場景不同

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

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

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

書中的關(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ù)源、事務管理等,通過IOC注入到攔截器即可;而Filter不能。

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

總結(jié)

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

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

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

相關(guān)文章

  • Java設計模式筆記之Builder模式

    Java設計模式筆記之Builder模式

    建造者模式是日常開發(fā)中比較常見的設計模式,它的主要作用就是將復雜事物創(chuàng)建的過程抽象出來,該抽象的不同實現(xiàn)方式不同,創(chuàng)建出的對象也不同,這篇文章主要給大家介紹了關(guān)于Java設計模式筆記之Builder模式的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • Java中正則表達式的使用和詳解(上)

    Java中正則表達式的使用和詳解(上)

    這篇文章主要介紹了Java中正則表達式的使用和詳解,包括匹配驗證驗證email是否正確,在字符串中查詢字符或者字符串的代碼實例,需要的朋友可以參考下
    2017-04-04
  • java線程池的四種創(chuàng)建方式詳細分析

    java線程池的四種創(chuàng)建方式詳細分析

    這篇文章主要介紹了java線程池的四種創(chuàng)建方式詳細分析,連接池是創(chuàng)建和管理一個連接的緩沖池的技術(shù),這些連接準備好被任何需要它們的線程使用
    2022-07-07
  • SpringBoot關(guān)于List集合的校驗方式

    SpringBoot關(guān)于List集合的校驗方式

    這篇文章主要介紹了SpringBoot關(guān)于List集合的校驗方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Spring?Boot配置內(nèi)容加密實現(xiàn)敏感信息保護

    Spring?Boot配置內(nèi)容加密實現(xiàn)敏感信息保護

    之前我們講過的配置相關(guān)知識都是Spring?Boot原生就提供的,而今天我們將介紹的功能并非Spring?Boot原生就支持,但卻非常有用:配置內(nèi)容的加密
    2021-11-11
  • Java Fluent Mybatis 分頁查詢與sql日志輸出詳解流程篇

    Java Fluent Mybatis 分頁查詢與sql日志輸出詳解流程篇

    Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。國內(nèi)又以Mybatis用的多,基于mybatis上的增強框架,又有mybatis plus和TK mybatis等。今天我們介紹一個新的mybatis增強框架 fluent mybatis關(guān)于分頁查詢、sql日志輸出流程
    2021-10-10
  • SpringMVC使用MultipartFile 實現(xiàn)異步上傳方法介紹

    SpringMVC使用MultipartFile 實現(xiàn)異步上傳方法介紹

    這篇文章主要介紹了SpringMVC使用MultipartFile 實現(xiàn)異步上傳方法介紹,涉及pom依賴的添加,配置文件的修改等具體操作代碼,需要的朋友可以了解下。
    2017-09-09
  • java字符串的截取方法substring()代碼解析

    java字符串的截取方法substring()代碼解析

    這篇文章主要介紹了java字符串的截取方法substring()代碼解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • SpringBoot集成H2內(nèi)存數(shù)據(jù)庫的方法

    SpringBoot集成H2內(nèi)存數(shù)據(jù)庫的方法

    H2是Thomas Mueller提供的一個開源的、純java實現(xiàn)的關(guān)系數(shù)據(jù)庫。本文主要介紹了SpringBoot集成H2內(nèi)存數(shù)據(jù)庫,具有一定的參考價值,感興趣的可以了解一下
    2021-09-09
  • Java字符串排序的幾種實現(xiàn)方式

    Java字符串排序的幾種實現(xiàn)方式

    這篇文章主要給大家介紹了關(guān)于Java字符串排序的幾種實現(xiàn)方式, 使用Java平臺進行字符串排序被認為是一件簡單的工作,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07

最新評論