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

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

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

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

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

  • Filter(過濾器) 基于Servlet規(guī)范(J2EE標(biāo)準(zhǔn)),由Servlet容器(如Tomcat)管理,不依賴Spring框架。 示例:字符編碼過濾器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)

二、使用場景與選型策略

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

  • 全局基礎(chǔ)處理 需對(duì)所有請(qǐng)求統(tǒng)一處理,如:
    • 字符編碼設(shè)置(UTF-8) 
    • 跨域處理(CORS頭配置) 
    • XSS防御(參數(shù)過濾) 
  • 非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的場景

  • 業(yè)務(wù)邏輯攔截 需與Spring上下文交互時(shí),如:
    • 登錄認(rèn)證(讀取Session) 
    • 權(quán)限校驗(yàn)(結(jié)合Spring Security) 
    • 參數(shù)預(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. 混合使用場景

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

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

1. Filter開發(fā)步驟

  1. 實(shí)現(xiàn)Filter接口 重寫doFilter方法,注意調(diào)用chain.doFilter()放行請(qǐng)求 。
  2. 注冊方式
    • 注解方式@WebFilter(urlPatterns="/*")(需主類加@ServletComponentScan
    • 配置類方式(推薦):
@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開發(fā)步驟

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

四、常見問題與避坑指南

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

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

2. 配置路徑陷阱

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

3. Spring上下文依賴

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

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

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

選型口訣

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

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

到此這篇關(guān)于Spring Boot攔截器Interceptor與過濾器Filter實(shí)戰(zhàn)指南的文章就介紹到這了,更多相關(guān)Spring Boot攔截器Interceptor與過濾器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工具類,讓圖片變成回憶中的畫面,主要將圖片做黑白與褐色的處理。代碼具有一定價(jià)值,感興趣的童鞋可以關(guān)注一下
    2021-11-11
  • MyBatis-Plus解決邏輯刪除與唯一索引的問題

    MyBatis-Plus解決邏輯刪除與唯一索引的問題

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

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

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

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

    下面小編就為大家?guī)硪黄狫ava中IO流文件讀取、寫入和復(fù)制的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    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í),需配置),通過減少數(shù)據(jù)庫訪問提升性能,但存在臟數(shù)據(jù)和分布式不兼容風(fēng)險(xiǎn),適合高頻查詢低頻修改場景,需合理配置以平衡效率與一致性,本文給介紹Mybatis中緩存機(jī)制及優(yōu)缺點(diǎn),感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • 新手初學(xué)Java的內(nèi)部類

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

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

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

    Spring?Boot提供了多種條件裝配技術(shù),允許開發(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,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • 淺談Java垃圾回收機(jī)制

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

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

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

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

最新評(píng)論