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

Spring?Boot攔截器Interceptor與過(guò)濾器Filter實(shí)戰(zhàn)指南

 更新時(shí)間:2025年09月28日 10:26:19   作者:茶杯夢(mèng)軒  
本文給大家介紹Spring?Boot攔截器Interceptor與過(guò)濾器Filter實(shí)戰(zhàn)指南,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

一、核心概念與原理對(duì)比

1. 技術(shù)規(guī)范層級(jí)

  • Filter(過(guò)濾器) 基于Servlet規(guī)范(J2EE標(biāo)準(zhǔn)),由Servlet容器(如Tomcat)管理,不依賴(lài)Spring框架。 示例:字符編碼過(guò)濾器CharacterEncodingFilter。
  • Interceptor(攔截器) 基于Spring MVC框架機(jī)制,由Spring容器管理,與Spring上下文深度集成。 示例:登錄認(rèn)證攔截器AuthInterceptor。

2. 生命周期與作用范圍

特性FilterInterceptor
初始化時(shí)機(jī)Web應(yīng)用啟動(dòng)時(shí)初始化首次請(qǐng)求觸發(fā)時(shí)初始化
作用范圍所有Web資源(Servlet、靜態(tài)資源)僅Spring MVC的Controller請(qǐng)求
執(zhí)行階段Servlet處理前后Controller方法執(zhí)行前、后及視圖渲染后 

3. 執(zhí)行流程順序

HTTP請(qǐng)求 → Filter鏈 → DispatcherServlet → Interceptor.preHandle → Controller處理 → Interceptor.postHandle → 視圖渲染 → Interceptor.afterCompletion → Filter鏈返回響應(yīng)

二、使用場(chǎng)景與選型策略

1. 優(yōu)先選擇Filter的場(chǎng)景

  • 全局基礎(chǔ)處理 需對(duì)所有請(qǐng)求統(tǒng)一處理,如:
    • 字符編碼設(shè)置(UTF-8) 
    • 跨域處理(CORS頭配置) 
    • XSS防御(參數(shù)過(guò)濾) 
  • 非Spring環(huán)境 項(xiàng)目未使用Spring框架時(shí),F(xiàn)ilter是唯一選擇。
  • 代碼示例(Filter)
@WebFilter("/*")
public class LogFilter implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {
        long start = System.currentTimeMillis();
        chain.doFilter(req, res); // 必須放行請(qǐng)求
        System.out.println("耗時(shí):" + (System.currentTimeMillis() - start));
    }
}

2. 優(yōu)先選擇Interceptor的場(chǎng)景

  • 業(yè)務(wù)邏輯攔截 需與Spring上下文交互時(shí),如:
    • 登錄認(rèn)證(讀取Session) 
    • 權(quán)限校驗(yàn)(結(jié)合Spring Security) 
    • 參數(shù)預(yù)處理(如分頁(yè)參數(shù)封裝) 
  • 代碼示例(Interceptor)
@Component
public class AuthInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) {
        if (req.getSession().getAttribute("user") == null) {
            res.sendRedirect("/login");
            return false; // 中斷請(qǐng)求
        }
        return true;
    }
}

3. 混合使用場(chǎng)景

  • 日志記錄:Filter記錄請(qǐng)求開(kāi)始時(shí)間,Interceptor記錄Controller耗時(shí) 
  • 安全防護(hù):Filter做XSS過(guò)濾,Interceptor做權(quán)限校驗(yàn) 

三、實(shí)現(xiàn)步驟與配置指南

1. Filter開(kāi)發(fā)步驟

  1. 實(shí)現(xiàn)Filter接口 重寫(xiě)doFilter方法,注意調(diào)用chain.doFilter()放行請(qǐng)求 。
  2. 注冊(cè)方式
    • 注解方式@WebFilter(urlPatterns="/*")(需主類(lèi)加@ServletComponentScan
    • 配置類(lèi)方式(推薦):
@Bean
public FilterRegistrationBean<LogFilter> logFilter() {
    FilterRegistrationBean<LogFilter> bean = new FilterRegistrationBean<>();
    bean.setFilter(new LogFilter());
    bean.setOrder(1); // 優(yōu)先級(jí)
    bean.addUrlPatterns("/*");
    return bean;
}

2. Interceptor開(kāi)發(fā)步驟

  1. 實(shí)現(xiàn)HandlerInterceptor接口 重寫(xiě)preHandle、postHandleafterCompletion三階段方法 。
  2. 注冊(cè)攔截器
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new AuthInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/login", "/static/**");
    }
}

四、常見(jiàn)問(wèn)題與避坑指南

1. 執(zhí)行順序問(wèn)題

  • 多個(gè)Filter:按@Order值或注冊(cè)順序執(zhí)行 
  • 多個(gè)Interceptor:按registry.addInterceptor()添加順序執(zhí)行 
  • 經(jīng)典錯(cuò)誤:在Filter中修改請(qǐng)求參數(shù)后,Interceptor未獲取到新值(需使用HttpServletRequestWrapper包裝類(lèi)) 

2. 配置路徑陷阱

  • Filter路徑匹配/*表示所有路徑,/api/*僅匹配一級(jí)子路徑 
  • Interceptor排除路徑:靜態(tài)資源需顯式排除(如excludePathPatterns("/static/**")) 

3. Spring上下文依賴(lài)

  • Filter中注入Bean:需通過(guò)FilterRegistrationBean配置,直接@Autowired會(huì)失效(解決方法:使用WebApplicationContextUtils獲取上下文) 
  • Interceptor中注入Bean:可直接使用@Autowired(Spring管理) 

4. 請(qǐng)求阻塞問(wèn)題

  • Filter未調(diào)用chain.doFilter():導(dǎo)致請(qǐng)求未傳遞到后續(xù)組件 
  • Interceptor的preHandle返回false:需手動(dòng)響應(yīng)錯(cuò)誤信息(如response.sendError(401)) 

五、總結(jié)與選型建議

維度Filter優(yōu)勢(shì)Interceptor優(yōu)勢(shì)
技術(shù)棧兼容所有Java Web項(xiàng)目深度整合Spring生態(tài)
性能更接近底層,處理速度快可訪問(wèn)Spring上下文,業(yè)務(wù)邏輯處理更便捷
靈活性全局處理能力強(qiáng)支持細(xì)粒度控制(如按Controller方法攔截)

選型口訣

  • “底層通用選Filter,業(yè)務(wù)整合用Interceptor”
  • “靜態(tài)資源走Filter,動(dòng)態(tài)請(qǐng)求過(guò)Interceptor”

通過(guò)合理搭配Filter與Interceptor,可構(gòu)建高效、安全的Web應(yīng)用。建議在復(fù)雜項(xiàng)目中結(jié)合使用,發(fā)揮各自?xún)?yōu)勢(shì),如Filter處理全局基礎(chǔ)設(shè)施,Interceptor處理業(yè)務(wù)邏輯

到此這篇關(guān)于Spring Boot攔截器Interceptor與過(guò)濾器Filter實(shí)戰(zhàn)指南的文章就介紹到這了,更多相關(guān)Spring Boot攔截器Interceptor與過(guò)濾器Filter內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java 如何實(shí)現(xiàn)照片轉(zhuǎn)化為回憶中的照片

    Java 如何實(shí)現(xiàn)照片轉(zhuǎn)化為回憶中的照片

    本文主要介紹了可以對(duì)圖片進(jìn)行色彩處理的Java工具類(lèi),讓圖片變成回憶中的畫(huà)面,主要將圖片做黑白與褐色的處理。代碼具有一定價(jià)值,感興趣的童鞋可以關(guān)注一下
    2021-11-11
  • MyBatis-Plus解決邏輯刪除與唯一索引的問(wèn)題

    MyBatis-Plus解決邏輯刪除與唯一索引的問(wèn)題

    本文主要介紹了MyBatis-Plus解決邏輯刪除與唯一索引的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 淺談java的byte數(shù)組的不同寫(xiě)法

    淺談java的byte數(shù)組的不同寫(xiě)法

    下面小編就為大家?guī)?lái)一篇淺談java的byte數(shù)組的不同寫(xiě)法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • Java中IO流文件讀取、寫(xiě)入和復(fù)制的實(shí)例

    Java中IO流文件讀取、寫(xiě)入和復(fù)制的實(shí)例

    下面小編就為大家?guī)?lái)一篇Java中IO流文件讀取、寫(xiě)入和復(fù)制的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10
  • 深入解析Mybatis中緩存機(jī)制及優(yōu)缺點(diǎn)

    深入解析Mybatis中緩存機(jī)制及優(yōu)缺點(diǎn)

    MyBatis緩存分為一級(jí)(SqlSession級(jí),自動(dòng)維護(hù))和二級(jí)(Mapper級(jí),需配置),通過(guò)減少數(shù)據(jù)庫(kù)訪問(wèn)提升性能,但存在臟數(shù)據(jù)和分布式不兼容風(fēng)險(xiǎn),適合高頻查詢(xún)低頻修改場(chǎng)景,需合理配置以平衡效率與一致性,本文給介紹Mybatis中緩存機(jī)制及優(yōu)缺點(diǎn),感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • 新手初學(xué)Java的內(nèi)部類(lèi)

    新手初學(xué)Java的內(nèi)部類(lèi)

    這篇文章主要介紹了java內(nèi)部類(lèi)原理與用法,結(jié)合實(shí)例形式分析了Java內(nèi)部類(lèi)的概念、原理、分類(lèi)及相關(guān)使用技巧,需要的朋友可以參考下,希望能給你帶來(lái)幫助
    2021-07-07
  • SpringBoot中四種常用的條件裝配技術(shù)詳解

    SpringBoot中四種常用的條件裝配技術(shù)詳解

    Spring?Boot提供了多種條件裝配技術(shù),允許開(kāi)發(fā)者根據(jù)不同條件動(dòng)態(tài)配置應(yīng)用程序,本文將介紹Spring?Boot中四種常用的條件裝配技術(shù),需要的可以參考下
    2025-04-04
  • Idea Jrebel 報(bào)錯(cuò):Cannot reactivate,offline seat in use

    Idea Jrebel 報(bào)錯(cuò):Cannot reactivate,offline 

    本文主要介紹了Idea Jrebel 報(bào)錯(cuò):Cannot reactivate,offline seat in use,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 淺談Java垃圾回收機(jī)制

    淺談Java垃圾回收機(jī)制

    Java 中,程序員不需要關(guān)心所有不再使用的對(duì)象。垃圾回收機(jī)制自動(dòng)銷(xiāo)毀這些對(duì)象。垃圾回收機(jī)制是守護(hù)線程的最佳示例,因?yàn)樗冀K在后臺(tái)運(yùn)行。垃圾回收機(jī)制的主要目標(biāo)是通過(guò)銷(xiāo)毀無(wú)法訪問(wèn)的對(duì)象來(lái)釋放堆內(nèi)存。下面我們就來(lái)詳細(xì)介紹吧
    2021-09-09
  • Springboot讀取配置文件及自定義配置文件的方法

    Springboot讀取配置文件及自定義配置文件的方法

    這篇文章主要介紹了Springboot讀取配置文件及自定義配置文件的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12

最新評(píng)論