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

SpringBoot項目整合攔截器詳解

 更新時間:2023年10月21日 11:06:41   作者:浪浪山的猿  
這篇文章主要介紹了SpringBoot項目整合攔截器詳解,java里的攔截器是動態(tài)攔截Action調(diào)用的對象,它提供了一種機制可以使開發(fā)者在一個Action執(zhí)行的前后執(zhí)行一段代碼,攔截器用于在某個方法或者字段被訪問之前進行攔截,然后再之前或者之后加入某些操作,需要的朋友可以參考下

什么是攔截器

java里的攔截器是動態(tài)攔截Action調(diào)用的對象,它提供了一種機制可以使開發(fā)者在一個Action執(zhí)行的前后執(zhí)行一段代碼,也可以在一個Action執(zhí)行前阻止其執(zhí)行,同時也提供了一種可以提取Action中可重用部分代碼的方式。

在AOP中,攔截器用于在某個方法或者字段被訪問之前進行攔截,然后再之前或者之后加入某些操作。

攔截器的應(yīng)用場景

  • 日志記錄:可以記錄請求信息的日志,以便進行信息監(jiān)控、信息統(tǒng)計等。
  • 權(quán)限檢查:如登陸檢測,進入處理器檢測是否登陸,如果沒有直接返回到登陸頁面。
  • 性能監(jiān)控:典型的是慢日志。

攔截器的使用

自定義攔截器的步驟:

  • 自定義攔截器類并實現(xiàn)HandlerInterceptor接口
/**
 * @author gf
 * @date 2023/2/6
 */
@Component
public class Intercepter1 implements HandlerInterceptor {
    @Override
    //在將請求發(fā)送到控制器controller之前執(zhí)行操作,若返回true就進入控制器,若返回false就不進入控制器了
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String token = request.getHeader("token");
        System.out.println("自定義攔截器1-----攔截到的token值為:"+token);
        return null != token;
    }
 
    @Override
    //用于在將響應(yīng)發(fā)送到客戶端之前執(zhí)行操作,就是控制器執(zhí)行完之后返回數(shù)據(jù)時執(zhí)行。
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        System.out.println("自定義攔截器1-----控制器執(zhí)行完畢,返回數(shù)據(jù)");
    }
 
    @Override
    //在完成請求和響應(yīng)后執(zhí)行操作
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        System.out.println("自定義攔截器1-----響應(yīng)結(jié)束");
    }
 
}

自定義攔截器類,通過實現(xiàn)HandlerInterceptor接口并重寫他的三個方法,preHandle、postHandle、afterCompletion,實現(xiàn)攔截控制。

  • preHandle:在將請求發(fā)送到控制器controller之前執(zhí)行操作,若返回true就進入控制器,若返回false就不進入控制器了。
  • postHandle:用于在將響應(yīng)發(fā)送到客戶端之前執(zhí)行操作,就是控制器執(zhí)行完之后返回數(shù)據(jù)時執(zhí)行。
  • afterCompletion:在完成請求和響應(yīng)后執(zhí)行操作。

注冊自定義攔截器

攔截器的注冊是通過重寫WebMvcConfigurer接口的addInterceptors方法實現(xiàn)的,老版本的WebMvcConfigurerAdapter使用時發(fā)現(xiàn)已經(jīng)被淘汰了,不推薦使用了。

/**
 * @author gf
 * @date 2023/2/6
 */
@Configuration
public class InterceptConfig implements WebMvcConfigurer {
 
 
    //引入自定義攔截器對象
    @Resource
    private Intercepter1 Intercepter1;
 
 
    //重寫addInterceptors方法注冊攔截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
 
        //addPathPatterns方法添加攔截路徑匹配規(guī)則("/**"是攔截所有),excludePathPatterns方法是設(shè)置白名單,放行哪些路
        registry.addInterceptor(Intercepter1).addPathPatterns("/**").excludePathPatterns("/test/*").order(1);
    }
}

測試效果

編寫測試類

    @GetMapping("/test")
    public BaseResponse<String> sayHello(@RequestParam("name") String name){
        if(!name.equals("老王")){
            throw new BaseException(BaseErrorEnum.USER_NOT_EXIST);
        }
        else{
            return RespGenerator.success("調(diào)用成功");
        }
    }

測試先不傳token

可以看到不傳token時,preHandle方法返回false,不在執(zhí)行后面的方法

測試傳token

可以看到傳遞token后,攔截器放行,執(zhí)行了后面的方法,

攔截器的優(yōu)先級

我們重新再增加兩個攔截器

設(shè)置Order的值

請求接口,查看攔截器的執(zhí)行順序

對于order的順序:攔截器的preHandle方法是根據(jù)order的大小從小到大順序執(zhí)行,postHandle和afterCompletion方法是根據(jù)order的大小從小到大倒敘執(zhí)行。

攔截器和過濾器的區(qū)別

攔截器是spring在基于反射機制實現(xiàn)的,過濾器是基于servlet的回調(diào)實現(xiàn)的;

攔截器可以獲取IOC容器中的各個bean,而過濾器就不行,這點很重要,在攔截器里注入一個service,可以調(diào)用業(yè)務(wù)邏輯

深度不同:過濾器只在Servlet前后起作用,而攔截器可以深入到方法前后,異常拋出前后等,相比較過濾器具有更大的彈性。

到此這篇關(guān)于SpringBoot項目整合攔截器詳解的文章就介紹到這了,更多相關(guān)SpringBoot整合攔截器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談Java8 的foreach跳出循環(huán)break/return

    淺談Java8 的foreach跳出循環(huán)break/return

    這篇文章主要介紹了Java8 的foreach跳出循環(huán)break/return,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 深度解析Spring Security 中的 SecurityFilterChain核心功能

    深度解析Spring Security 中的 SecurityFilterChain核心功

    SecurityFilterChain通過組件化配置、類型安全路徑匹配、多鏈協(xié)同三大特性,重構(gòu)了Spring Security的配置范式,接下來通過本文給大家介紹Spring Security中的SecurityFilterChain核心功能,感興趣的朋友一起看看吧
    2025-08-08
  • Java8 自定義CompletableFuture的原理解析

    Java8 自定義CompletableFuture的原理解析

    這篇文章主要介紹了Java8 自定義CompletableFuture的原理解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java如何測試網(wǎng)絡(luò)連通性

    java如何測試網(wǎng)絡(luò)連通性

    這篇文章主要為大家詳細介紹了java測試網(wǎng)絡(luò)連通性的兩種方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Java之鍵盤輸入語句Scanner解讀

    Java之鍵盤輸入語句Scanner解讀

    這篇文章主要介紹了Java之鍵盤輸入語句Scanner解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • javaNIO中關(guān)于ByteBuffer的用法

    javaNIO中關(guān)于ByteBuffer的用法

    這篇文章主要介紹了javaNIO中關(guān)于ByteBuffer的用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • mybatis自動生成@Table、@Column、@Id注解的方法

    mybatis自動生成@Table、@Column、@Id注解的方法

    這篇文章主要介紹了mybatis自動生成@Table、@Column、@Id注解的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • SpringBoot使用@EnableAutoConfiguration實現(xiàn)自動配置詳解

    SpringBoot使用@EnableAutoConfiguration實現(xiàn)自動配置詳解

    你有想過SpringBoot為什么能夠自動的幫我們創(chuàng)建一個Bean對象么?或許在我們使用的時候只需要在自己自定義的配置文件中加入@Bean對象就可以,但SpringBoot是如何來創(chuàng)建的呢
    2022-08-08
  • JsonProperty及JSONField注解的使用說明

    JsonProperty及JSONField注解的使用說明

    文章介紹了兩個常用的Java庫注解:Jackson的@JsonProperty和Fastjson的@JSONField,它們用于控制Java對象與JSON數(shù)據(jù)之間的序列化和反序列化,文章詳細說明了這兩個注解的常見屬性及其使用場景,包括指定屬性名、控制字段可見性、設(shè)置默認值和標(biāo)記字段的必需性
    2024-12-12
  • SpringCloud-Spring?Boot?Starter使用測試及問題小結(jié)

    SpringCloud-Spring?Boot?Starter使用測試及問題小結(jié)

    Spring?Boot?Starter?是在?SpringBoot?組件中被提出來的一種概念、簡化了很多煩瑣的配置、通過引入各種?Spring?Boot?Starter?包可以快速搭建出一個項目的腳手架,這篇文章主要介紹了SpringCloud-Spring?Boot?Starter使用測試,需要的朋友可以參考下
    2022-07-07

最新評論

泰来县| 福贡县| 绥德县| 黄龙县| 吕梁市| 鄂托克前旗| 揭东县| 乌苏市| 南岸区| 新乐市| 武威市| 潼关县| 清流县| 个旧市| 北票市| 靖州| 辽宁省| 清水县| 毕节市| 丹江口市| 娱乐| 绵阳市| 自贡市| 新余市| 阿克苏市| 沾化县| 陆川县| 枝江市| 定边县| 河池市| 灵寿县| 博乐市| 西吉县| 嘉峪关市| 沈丘县| 阜阳市| 奉节县| 渝北区| 凤城市| 沙坪坝区| 新绛县|