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

spring中Interceptor的使用小結(jié)

 更新時(shí)間:2025年12月14日 10:42:43   作者:有夢想的攻城獅  
Spring Interceptor是Spring MVC提供的一種機(jī)制,用于在請求處理的不同階段插入自定義邏輯,通過實(shí)現(xiàn)HandlerInterceptor接口并注冊攔截器,可以控制攔截器的執(zhí)行順序和路徑匹配規(guī)則,下面就來詳細(xì)的介紹一下,感興趣的可以了解一下

一、Interceptor 的核心概念

Interceptor(攔截器) 是 Spring MVC 提供的一種機(jī)制,用于在請求處理的不同階段插入自定義邏輯。其核心作用包括:

  • 預(yù)處理:在控制器方法執(zhí)行前進(jìn)行權(quán)限校驗(yàn)、日志記錄等。
  • 后處理:在控制器方法執(zhí)行后修改響應(yīng)數(shù)據(jù)或記錄結(jié)果。
  • 資源清理:在整個(gè)請求完成后釋放資源或處理異常。

與 Filter 的區(qū)別:

特性Interceptor(攔截器)Filter(過濾器)
作用范圍針對 Spring MVC 的控制器層作用于 Servlet 容器層面
依賴框架Spring MVC 管理Servlet 原生規(guī)范
數(shù)據(jù)訪問可操作 ModelAndView僅能操作 HttpServletRequest/Response。

二、Interceptor 的創(chuàng)建與配置

  1. 實(shí)現(xiàn)攔截器類
    繼承 HandlerInterceptor 接口,重寫以下方法:
public class AuthInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        // 請求前處理(如權(quán)限校驗(yàn))
        return true; // 返回 false 中斷請求
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        // 控制器執(zhí)行后、視圖渲染前處理(如修改 Model 數(shù)據(jù))
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        // 請求完成后處理(如資源清理)
    }
}
  1. 注冊攔截器
    通過 WebMvcConfigureraddInterceptors 方法配置:
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new AuthInterceptor())
                .addPathPatterns("/api/**")     // 攔截路徑
                .excludePathPatterns("/login"); // 排除路徑
    }
}
  • 路徑匹配規(guī)則:支持 Ant 風(fēng)格(如 /user/* 匹配單層路徑,/admin/** 匹配多級(jí)路徑)。
  • 多攔截器順序:通過 Order 注解或?qū)崿F(xiàn) Ordered 接口控制優(yōu)先級(jí),值越小優(yōu)先級(jí)越高。

三、攔截器的執(zhí)行順序

假設(shè)注冊了 Interceptor1 和 Interceptor2:

  1. preHandle 方法:按注冊順序執(zhí)行(Interceptor1 → Interceptor2)。
  2. postHandle 方法:按注冊逆序執(zhí)行(Interceptor2 → Interceptor1)。
  3. afterCompletion 方法:按注冊逆序執(zhí)行(Interceptor2 → Interceptor1)。

中斷場景:若某一攔截器的 preHandle 返回 false,后續(xù)攔截器和控制器均不執(zhí)行,但已通過 preHandle 的攔截器的 afterCompletion 仍會(huì)執(zhí)行。

四、典型應(yīng)用場景

  1. 權(quán)限校驗(yàn)
    preHandle 中檢查用戶登錄狀態(tài)或角色權(quán)限,拒絕非法請求。

    if (request.getSession().getAttribute("user") == null) {
        response.sendRedirect("/login");
        return false;
    }
    
  2. 日志記錄
    記錄請求路徑、參數(shù)、耗時(shí)等信息:

    long startTime = System.currentTimeMillis();
    request.setAttribute("startTime", startTime);
    // 在 afterCompletion 中計(jì)算耗時(shí)
    
  3. 性能監(jiān)控
    統(tǒng)計(jì)接口響應(yīng)時(shí)間,優(yōu)化慢請求。

  4. 數(shù)據(jù)預(yù)處理
    postHandle 中統(tǒng)一添加響應(yīng)頭或加密敏感數(shù)據(jù)。

五、注意事項(xiàng)與最佳實(shí)踐

性能優(yōu)化

  • 避免在攔截器中執(zhí)行耗時(shí)操作(如遠(yuǎn)程調(diào)用)。
  • 合理設(shè)置攔截路徑,減少不必要的攔截。

常見問題排查

  • 攔截器未生效:檢查路徑匹配規(guī)則、是否注冊到 Spring 容器。
  • 順序混亂:通過 @Order 明確優(yōu)先級(jí)。

與 AOP 結(jié)合

  • 攔截器適用于請求生命周期中的橫切邏輯,而 AOP 更適用于方法級(jí)別的切面(如事務(wù)管理)。

六、完整示例

  1. 日志攔截器
public class LogInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        System.out.println("請求開始: " + request.getRequestURI());
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        System.out.println("請求完成: " + request.getRequestURI());
    }
}
  1. 配置類
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LogInterceptor()).addPathPatterns("/**");
        registry.addInterceptor(new AuthInterceptor())
                .addPathPatterns("/admin/**")
                .order(1); // 高優(yōu)先級(jí)
    }
}

總結(jié)

Spring Interceptor 是處理請求生命周期橫切邏輯的利器,通過靈活配置路徑和優(yōu)先級(jí),可實(shí)現(xiàn)權(quán)限控制、日志記錄等通用功能。結(jié)合 preHandlepostHandleafterCompletion 的分階段處理,能有效提升代碼復(fù)用性和可維護(hù)性。

到此這篇關(guān)于spring中Interceptor的使用小結(jié)的文章就介紹到這了,更多相關(guān)spring Interceptor使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot項(xiàng)目打jar包與war包的詳細(xì)步驟

    SpringBoot項(xiàng)目打jar包與war包的詳細(xì)步驟

    SpringBoot和我們之前學(xué)習(xí)的web應(yīng)用程序不一樣,其本質(zhì)上是一個(gè) Java應(yīng)用程序,那么又如何部署呢?這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目打jar包與war包的詳細(xì)步驟,需要的朋友可以參考下
    2023-02-02
  • spring+springmvc整合mabytis時(shí)mapper注入失敗問題解決方法

    spring+springmvc整合mabytis時(shí)mapper注入失敗問題解決方法

    這篇文章主要介紹了spring+springmvc整合mabytis時(shí)mapper注入失敗問題解決方法 ,需要的朋友可以參考下
    2017-08-08
  • SpringMVC中常用注解與使用方法詳解

    SpringMVC中常用注解與使用方法詳解

    這篇文章主要介紹了SpringMVC中常用注解與使用方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • Java線程的聯(lián)合用法實(shí)例分析

    Java線程的聯(lián)合用法實(shí)例分析

    這篇文章主要介紹了Java線程的聯(lián)合用法,結(jié)合實(shí)例形式分析了java線程聯(lián)合的原理、實(shí)現(xiàn)方法及相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • java IO流之轉(zhuǎn)換流的具體使用

    java IO流之轉(zhuǎn)換流的具體使用

    轉(zhuǎn)換流可以將一個(gè)字節(jié)流包裝成字符流,或者將一個(gè)字符流包裝成字節(jié)流,本文主要介紹了java IO流之轉(zhuǎn)換流的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 淺談十個(gè)常見的Java異常出現(xiàn)原因

    淺談十個(gè)常見的Java異常出現(xiàn)原因

    這篇文章主要介紹了十個(gè)常見的Java異常出現(xiàn)原因,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • java 將jsonarray 轉(zhuǎn)化為對應(yīng)鍵值的jsonobject方法

    java 將jsonarray 轉(zhuǎn)化為對應(yīng)鍵值的jsonobject方法

    下面小編就為大家分享一篇java 將jsonarray 轉(zhuǎn)化為對應(yīng)鍵值的jsonobject方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Java_異常類(錯(cuò)誤和異常,兩者的區(qū)別介紹)

    Java_異常類(錯(cuò)誤和異常,兩者的區(qū)別介紹)

    下面小編就為大家?guī)硪黄狫ava_異常類(錯(cuò)誤和異常,兩者的區(qū)別介紹) 。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • Java classloader和namespace詳細(xì)介紹

    Java classloader和namespace詳細(xì)介紹

    這篇文章主要介紹了Java classloader和namespace詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • IDEA導(dǎo)入eclipse項(xiàng)目并且部署到tomcat的步驟詳解

    IDEA導(dǎo)入eclipse項(xiàng)目并且部署到tomcat的步驟詳解

    這篇文章主要給大家介紹了關(guān)于IDEA導(dǎo)入eclipse項(xiàng)目并且部署到tomcat的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02

最新評(píng)論

卫辉市| 碌曲县| 外汇| 神农架林区| 徐州市| 宝兴县| 司法| 邯郸市| 珲春市| 临湘市| 汝城县| 张家港市| 海南省| 锦屏县| 沐川县| 新干县| 桃园市| 威远县| 武隆县| 咸丰县| 云和县| 体育| 禹州市| 涟水县| 怀来县| 新竹县| 会宁县| 田东县| 霍邱县| 桑植县| 合水县| 且末县| 永和县| 普兰县| 方城县| 灵川县| 休宁县| 鄄城县| 江城| 聊城市| 西贡区|