chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Spring攔截器:你的請(qǐng)求休想逃過(guò)我的五指山!

京東云 ? 來(lái)源:jf_75140285 ? 作者:jf_75140285 ? 2025-07-26 11:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

攔截器概述

在Spring框架中,攔截器(Interceptor)是一種強(qiáng)大的機(jī)制,它允許開發(fā)者在請(qǐng)求處理的不同階段插入自定義邏輯。WebApplicationContext作為Spring Web應(yīng)用的上下文容器,為攔截器的配置和管理提供了基礎(chǔ)支持。

攔截器主要作用于以下場(chǎng)景:
權(quán)限驗(yàn)證
日志記錄
性能監(jiān)控
事務(wù)管理
通用行為注入等

攔截器與WebApplicationContext的關(guān)系

WebApplicationContext是Spring Web應(yīng)用的IoC容器擴(kuò)展,它繼承自ApplicationContext,并添加了Web應(yīng)用特有的功能。攔截器通過(guò)WebApplicationContext進(jìn)行注冊(cè)和管理,成為請(qǐng)求處理管道的一部分。

public interface WebApplicationContext extends ApplicationContext {
    String ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE = WebApplicationContext.class.getName() + ".ROOT";
    
    ServletContext getServletContext();
}

攔截器類型

HandlerInterceptor

最常用的攔截器接口,定義了三個(gè)關(guān)鍵方法:

public interface HandlerInterceptor {
    default boolean preHandle(HttpServletRequest request, 
                             HttpServletResponse response, 
                             Object handler) throws Exception {
        return true;
    }
    
    default void postHandle(HttpServletRequest request, 
                          HttpServletResponse response, 
                          Object handler,
                          ModelAndView modelAndView) throws Exception {
    }
    
    default void afterCompletion(HttpServletRequest request, 
                               HttpServletResponse response, 
                               Object handler, 
                               Exception ex) throws Exception {
    }
}

AsyncHandlerInterceptor

HandlerInterceptor的擴(kuò)展,增加了異步處理的支持。

WebRequestInterceptor

與HandlerInterceptor類似,但提供了更通用的WebRequest抽象,不依賴于Servlet API。

攔截器配置

XML配置方式


    
    
    
    
    
        
        
    

Java配置方式

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoggingInterceptor())
                .addPathPatterns("/**")
                .excludePathPatterns("/static/**");
        
        registry.addInterceptor(new AuthInterceptor())
                .addPathPatterns("/admin/**");
    }
}

注解方式

@Component
public class MyInterceptor implements HandlerInterceptor {
    // 實(shí)現(xiàn)方法
}

@Configuration
public class InterceptorConfig {
    
    @Autowired
    private MyInterceptor myInterceptor;
    
    @Bean
    public WebMvcConfigurer adapter() {
        return new WebMvcConfigurer() {
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                registry.addInterceptor(myInterceptor);
            }
        };
    }
}

攔截器執(zhí)行流程

攔截器在DispatcherServlet的處理流程中扮演重要角色:

preHandle:在處理器執(zhí)行前調(diào)用

返回true繼續(xù)執(zhí)行

返回false中斷請(qǐng)求處理

postHandle:在處理器執(zhí)行后,視圖渲染前調(diào)用

可修改ModelAndView

afterCompletion:在完整請(qǐng)求完成后調(diào)用

適合資源清理

高級(jí)攔截器特性

攔截器順序控制

可以通過(guò)order屬性控制多個(gè)攔截器的執(zhí)行順序:

registry.addInterceptor(new InterceptorA()).order(1);
registry.addInterceptor(new InterceptorB()).order(2);

路徑匹配模式

支持Ant風(fēng)格的路徑模式:

? 匹配一個(gè)字符

匹配零個(gè)或多個(gè)字符

** 匹配零個(gè)或多個(gè)目錄

異步請(qǐng)求處理

對(duì)于異步請(qǐng)求,afterConcurrentHandlingStarted方法會(huì)被調(diào)用而不是postHandle和afterCompletion。

攔截器與過(guò)濾器的區(qū)別

特性 攔截器(Interceptor) 過(guò)濾器(Filter)
容器依賴 Spring容器 Servlet容器
作用范圍 Spring MVC處理的請(qǐng)求 所有進(jìn)入容器的請(qǐng)求
訪問(wèn)對(duì)象 可以訪問(wèn)Handler和方法信息 只能訪問(wèn)ServletRequest/Response
執(zhí)行時(shí)機(jī) 在DispatcherServlet內(nèi)部執(zhí)行 在DispatcherServlet外部執(zhí)行
依賴注入 支持 不支持

實(shí)際應(yīng)用示例

日志攔截器

public class LoggingInterceptor implements HandlerInterceptor {
    
    private static final Logger logger = LoggerFactory.getLogger(LoggingInterceptor.class);
    
    @Override
    public boolean preHandle(HttpServletRequest request, 
                           HttpServletResponse response, 
                           Object handler) {
        long startTime = System.currentTimeMillis();
        request.setAttribute("startTime", startTime);
        logger.info("Request URL: {} : Start Time={}", 
                   request.getRequestURL(), startTime);
        return true;
    }
    
    @Override
    public void afterCompletion(HttpServletRequest request, 
                               HttpServletResponse response, 
                               Object handler, 
                               Exception ex) {
        long startTime = (Long) request.getAttribute("startTime");
        long endTime = System.currentTimeMillis();
        logger.info("Request URL: {} : End Time={} : Time Taken={}ms", 
                   request.getRequestURL(), endTime, (endTime - startTime));
    }
}

認(rèn)證攔截器

public class AuthInterceptor implements HandlerInterceptor {
    
    @Override
    public boolean preHandle(HttpServletRequest request,
                            HttpServletResponse response,
                            Object handler) throws Exception {
        
        HttpSession session = request.getSession();
        if (session.getAttribute("user") == null) {
            response.sendRedirect("/login");
            return false;
        }
        return true;
    }
}

DEMO實(shí)測(cè)效果

被攔截

image.png

未被攔截

image.png
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Web
    Web
    +關(guān)注

    關(guān)注

    2

    文章

    1296

    瀏覽量

    73015
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    521

    瀏覽量

    22719
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    341

    瀏覽量

    15563
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    HarmonyOS實(shí)戰(zhàn)開發(fā)-如何在Navigation中完成路由攔截

    路由攔截器interceptor.ets,定義攔截容器、注冊(cè)方法和公共攔截邏輯,interceptor.ets /** * 定義攔截實(shí)現(xiàn)接口 * * @param routerI
    發(fā)表于 05-08 14:21

    什么是java spring

    的事情。然而,Spring的用途不僅限于服務(wù)端的開發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。Spring是一個(gè)容器,它包含并且管理系統(tǒng)對(duì)象
    發(fā)表于 09-11 11:16

    想做一個(gè)號(hào)碼攔截器。面對(duì)面5米內(nèi)接收到對(duì)方的手機(jī)號(hào)碼。也咨詢很多人,不是技

    想做一個(gè)號(hào)碼攔截器。面對(duì)面5米內(nèi)接收到對(duì)方的手機(jī)號(hào)碼。也咨詢很多人,不是技術(shù)問(wèn)題就是,怕這東西觸犯法律。只是正規(guī)用途,并不會(huì)觸犯法律底線!望“能人”解決
    發(fā)表于 04-29 16:16

    五指山回收發(fā)那科驅(qū)動(dòng)回收三菱變頻回收秀洲CPU模塊執(zhí)行回收PLC

    `五指山回收發(fā)那科驅(qū)動(dòng)回收三菱變頻回收秀洲CPU模塊執(zhí)行回收PLC,長(zhǎng)期專業(yè)回收西門子系列觸摸屏,回收西門子人機(jī)界面,回收西門子擴(kuò)展模塊,回收西門子電源模塊,回收西門子通訊模塊,
    發(fā)表于 07-14 17:50

    網(wǎng)絡(luò)組件axios可以在OpenHarmony上使用了

    分為兩種:請(qǐng)求攔截器、響應(yīng)攔截器。● 請(qǐng)求攔截器請(qǐng)求發(fā)送前進(jìn)行必要操作處理,例如添加統(tǒng)一co
    發(fā)表于 08-29 12:11

    動(dòng)能攔截器六自由度仿真建模研究

    仿真建模技術(shù)是動(dòng)能攔截器制導(dǎo)律研究中的重要技術(shù),文中主要建立動(dòng)能攔截器的軌道運(yùn)動(dòng)動(dòng)力學(xué)以及姿態(tài)運(yùn)動(dòng)動(dòng)力學(xué)模型,并建立完整的制導(dǎo)控制系統(tǒng)數(shù)學(xué)模型。文末,以某型
    發(fā)表于 08-07 08:50 ?14次下載

    springmvc 自定義攔截器實(shí)現(xiàn)未登錄用戶的攔截

    springmvc自定義攔截器實(shí)現(xiàn)未登錄用戶的攔截
    發(fā)表于 11-25 14:44 ?2635次閱讀
    springmvc 自定義<b class='flag-5'>攔截器</b>實(shí)現(xiàn)未登錄用戶的<b class='flag-5'>攔截</b>

    汽車庫(kù)融融資監(jiān)控“五指山

    ,使用了這個(gè)技術(shù)手段,如同有了如來(lái)佛祖的“五指山”,不用人為管理了,大幅節(jié)約成本,本質(zhì)上徹底實(shí)現(xiàn)監(jiān)管。智信通庫(kù)融融資方案將逐步成為主流小編看著躊躇滿志的智信通銷售總經(jīng)理,感嘆:科技,只有科技支撐的公司,才可以有這樣的底氣。同時(shí)隱約感覺(jué)到智信通庫(kù)融融資方案的潛力實(shí)在巨大。
    發(fā)表于 09-20 14:57 ?271次閱讀

    小米的“五指山”意圖擊敗余承東的華為終端+榮耀組合的寶具“雙截龍”

    首先是小米的“五指山”,“ 小米將專注先進(jìn)技術(shù)的率先導(dǎo)入”,問(wèn)題是小米有先進(jìn)技術(shù)嗎?據(jù)小米官方消息,小米集團(tuán)在2018年第一季度的研發(fā)費(fèi)用為11.04億元;2017年全年研發(fā)費(fèi)用為31.51億元
    的頭像 發(fā)表于 01-28 16:01 ?3877次閱讀

    五指刮擦試驗(yàn)儀測(cè)試方法的概述及優(yōu)勢(shì)介紹

    五指刮擦試驗(yàn)儀適用于行業(yè): 五指刮擦試驗(yàn)儀用于各種汽車用內(nèi)飾材料,如塑料、橡膠、皮革、織物、涂層材料、非涂層材料及其他復(fù)合材料等的耐刮擦性能檢測(cè)。 多功能耐刮擦儀也稱之為:耐刮擦試驗(yàn)機(jī)、耐刮擦測(cè)定儀
    發(fā)表于 07-27 11:26 ?2446次閱讀

    Spring認(rèn)證_什么是Spring GraphQL

    GraphQL 支持通過(guò) HTTP 和 WebSocket 的 GraphQL 請(qǐng)求。 HTTP GraphQlHttpHandler 通過(guò) HTTP 請(qǐng)求處理 GraphQL,并委托給 Web 攔截執(zhí)行
    的頭像 發(fā)表于 08-06 14:30 ?1085次閱讀
    <b class='flag-5'>Spring</b>認(rèn)證_什么是<b class='flag-5'>Spring</b> GraphQL

    Spring中用到了哪些設(shè)計(jì)模式

    Spring 通過(guò)動(dòng)態(tài)代理對(duì)類進(jìn)行方法級(jí)別的切面增強(qiáng),動(dòng)態(tài)生成目標(biāo)對(duì)象的代理類,并在代理類的方法中設(shè)置攔截器,通過(guò)執(zhí)行攔截器中的邏輯增強(qiáng)了代理方法的功能,從而實(shí)現(xiàn) AOP。
    發(fā)表于 05-30 09:43 ?438次閱讀
    <b class='flag-5'>Spring</b>中用到了哪些設(shè)計(jì)模式

    Spring MVC的工作原理是怎樣的

    的處理、視圖的渲染和響應(yīng)的發(fā)送。 首先,當(dāng)用戶在瀏覽中輸入一個(gè)URL并發(fā)送請(qǐng)求時(shí),請(qǐng)求被發(fā)送到服務(wù)。服務(wù)會(huì)根據(jù)
    的頭像 發(fā)表于 11-22 16:53 ?1301次閱讀

    springboot過(guò)濾器和攔截器哪個(gè)先執(zhí)行

    Spring Boot是一個(gè)用于構(gòu)建Java應(yīng)用程序的開發(fā)框架,它提供了許多功能和工具來(lái)簡(jiǎn)化開發(fā)和部署過(guò)程。其中兩個(gè)重要的功能是過(guò)濾器和攔截器。本文將詳細(xì)介紹Spring Boot過(guò)濾器和攔截
    的頭像 發(fā)表于 12-03 15:00 ?3175次閱讀

    使用go語(yǔ)言實(shí)現(xiàn)一個(gè)grpc攔截器

    在開發(fā)grpc服務(wù)時(shí),我們經(jīng)常會(huì)遇到一些通用的需求,比如:日志、鏈路追蹤、鑒權(quán)等。這些需求可以通過(guò)grpc攔截器來(lái)實(shí)現(xiàn)。本文使用go語(yǔ)言來(lái)實(shí)現(xiàn)一個(gè) grpc一元模式(Unary)攔截器,上報(bào)鏈路追蹤信息。
    的頭像 發(fā)表于 12-18 10:13 ?1098次閱讀
    使用go語(yǔ)言實(shí)現(xiàn)一個(gè)grpc<b class='flag-5'>攔截器</b>