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

gataway斷言工作流程源碼剖析

 更新時間:2024年01月15日 08:31:37   作者:朱永勝  
這篇文章主要為大家介紹了gataway斷言工作流程源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Cookie斷言

Cookie斷言來說,首先看它的體系結(jié)構(gòu)

public class CookieRoutePredicateFactory
        extends AbstractRoutePredicateFactory<CookieRoutePredicateFactory.Config> {
    /**
     * Name key.
     */
    public static final String NAME_KEY = "name";
    /**
     * Regexp key.
     */
    public static final String REGEXP_KEY = "regexp";
    public CookieRoutePredicateFactory() {
        super(Config.class);
    }
    /*
      通過shortcutFieldOrder方法設(shè)置Config配置類中的屬性,需要根據(jù)具體的規(guī)則來設(shè)置
      通過shortcutType方法獲取具體規(guī)則,具體參看:org.springframework.cloud.gateway.support.ShortcutConfigurable.ShortcutType
      規(guī)則包括以下幾種:
        DEFAULT : 按照shortcutFieldOrder順序依次賦值
    */
    @Override
    public List<String> shortcutFieldOrder() {
        return Arrays.asList(NAME_KEY, REGEXP_KEY);
    }
    @Override
    public Predicate<ServerWebExchange> apply(Config config) {
        return new GatewayPredicate() {
            @Override
            public boolean test(ServerWebExchange exchange) {
                List<HttpCookie> cookies = exchange.getRequest().getCookies()
                        .get(config.name);
                if (cookies == null) {
                    return false;
                }
                for (HttpCookie cookie : cookies) {
                    if (cookie.getValue().matches(config.regexp)) {
                        return true;
                    }
                }
                return false;
            }
            @Override
            public String toString() {
                return String.format("Cookie: name=%s regexp=%s", config.name,
                        config.regexp);
            }
        };
    }
    /*
     內(nèi)部配置類是用來接收在配置文件中配置的參數(shù)的
      routes:
        #唯一標(biāo)識符
        - id: hailtaxi-driver
          uri: lb://hailtaxi-driver
          #路由斷言
          predicates:
            - Cookie=username,itheima
    */
    @Validated
    public static class Config {
        @NotEmpty
        private String name;
        @NotEmpty
        private String regexp;
        public String getName() {
            return name;
        }
        public Config setName(String name) {
            this.name = name;
            return this;
        }
        public String getRegexp() {
            return regexp;
        }
        public Config setRegexp(String regexp) {
            this.regexp = regexp;
            return this;
        }
    }
}

盡管Spring Cloud Gateway已經(jīng)包含了很多路由匹配規(guī)則,有時候我們需要開發(fā)自定義路由匹配規(guī)則來滿足需求,下面簡單的介紹一下如何自定義路由匹配規(guī)則。

案例

需求:轉(zhuǎn)發(fā)帶token的請求到hailtaxi-drvier服務(wù)中,這里定義請求帶token是指包含某個請求頭的請求,至于是什么請求頭可以由配置指定

1、修改配置文件

gateway:
      #路由配置
      routes:
        #唯一標(biāo)識符
        - id: hailtaxi-driver
          uri: lb://hailtaxi-driver
          #路由斷言
          predicates:
            # 自定義一個Token斷言,如果請求包含Authorization的token信息則通過
            - Token=Authorization

2、創(chuàng)建 RoutePredicateFactory

斷言工廠默認(rèn)命名規(guī)則必須按照"名稱"+RoutePredicateFactory,如上TokenRoutePredicateFactory的斷言名稱為Token

@Slf4j
@Component // 要交給spring容器管理
public class TokenRoutePredicateFactory extends AbstractRoutePredicateFactory<TokenRoutePredicateFactory.Config> {
    public TokenRoutePredicateFactory() {
        super(Config.class);
    }
    public Predicate<ServerWebExchange> apply(Config config) {
        return exchange -> {
            // 打印配置文件參數(shù)值
            String headerName = config.getHeaderName();
            HttpHeaders headers = exchange.getRequest().getHeaders();
            List<String> header = headers.get(headerName);
            log.info("Token Predicate headers:{}", header);
            // 斷言返回的是boolean值
            return header!=null && header.size()>0;
        };
    }
    @Override
    public List<String> shortcutFieldOrder() {
        return Arrays.asList("headerName");//指定配置文件中加載到的配置信息應(yīng)填充到Config的哪個屬性上
    }
    @Override
    public ShortcutType shortcutType() {
        return ShortcutType.DEFAULT;
    }
    @Data
    public static class Config { //static class
        private String headerName;//存儲從配置文件中加載的配置
    }
}

啟動測試:http://localhost:8001/driver/info/1

以上就是gataway斷言源碼剖析的詳細(xì)內(nèi)容,更多關(guān)于gataway斷言的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring Cloud Stream如何實現(xiàn)服務(wù)之間的通訊

    Spring Cloud Stream如何實現(xiàn)服務(wù)之間的通訊

    這篇文章主要介紹了Spring Cloud Stream如何實現(xiàn)服務(wù)之間的通訊,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • 解決IDEA中快捷鍵Alt+Enter不能使用的問題

    解決IDEA中快捷鍵Alt+Enter不能使用的問題

    這篇文章主要介紹了解決IDEA中快捷鍵Alt+Enter不能使用的問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Java多線程之線程的創(chuàng)建

    Java多線程之線程的創(chuàng)建

    這篇文章主要介紹了Java多線程之線程的創(chuàng)建,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Java 十大排序算法之插入排序刨析

    Java 十大排序算法之插入排序刨析

    插入排序(InsertionSort),一般也被稱為直接插入排序。對于少量元素的排序,它是一個有效的算法。插入排序是一種最簡單的排序方法,它的基本思想是將一個記錄插入到已經(jīng)排好序的有序表中,從而一個新的、記錄數(shù)增 1 的有序表
    2021-11-11
  • Java超詳細(xì)講解設(shè)計模式之一的工廠模式

    Java超詳細(xì)講解設(shè)計模式之一的工廠模式

    工廠模式有 3 種不同的實現(xiàn)方式,分別是簡單工廠模式、工廠方法模式和抽象工廠模式,工廠模式最大的特點就是解耦合,本篇帶你詳細(xì)了解它
    2022-03-03
  • SpringBoot3實現(xiàn)webclient的通用方法詳解

    SpringBoot3實現(xiàn)webclient的通用方法詳解

    Spring Boot WebClient 是 Spring Framework 5 中引入的一個新的響應(yīng)式 Web 客戶端,用于異步和響應(yīng)式地與外部服務(wù)進(jìn)行通信,下面我們就來看看SpringBoot3實現(xiàn)webclient的通用方法吧
    2024-04-04
  • Java漢字轉(zhuǎn)換拼音(大小寫)實例詳解

    Java漢字轉(zhuǎn)換拼音(大小寫)實例詳解

    這篇文章主要給大家介紹了關(guān)于Java漢字轉(zhuǎn)換拼音(大小寫)的相關(guān)資料,包括使用java.text.Normalizer類和正則表達(dá)式進(jìn)行大小寫轉(zhuǎn)換,通過示例代碼和場景說明,幫助讀者在實際項目中實現(xiàn)漢字與拼音的轉(zhuǎn)換,需要的朋友可以參考下
    2025-05-05
  • Java新特性之Nashorn_動力節(jié)點Java學(xué)院整理

    Java新特性之Nashorn_動力節(jié)點Java學(xué)院整理

    這篇文章主要介紹了Java新特性之Nashorn的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Java發(fā)送form-data請求實現(xiàn)文件上傳

    Java發(fā)送form-data請求實現(xiàn)文件上傳

    這篇文章主要為大家詳細(xì)介紹了Java發(fā)送form-data請求實現(xiàn)文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 分享我的第一次java Selenium自動化測試框架開發(fā)過程

    分享我的第一次java Selenium自動化測試框架開發(fā)過程

    這篇文章主要介紹了分享我的第一次java Selenium自動化測試框架開發(fā)過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評論

花莲县| 七台河市| 江油市| 遂宁市| 马公市| 高邑县| 泰州市| 蓬安县| 湾仔区| 丰原市| 华安县| 乐都县| 绍兴县| 老河口市| 清远市| 汉中市| 西藏| 涿鹿县| 乐都县| 资源县| 湟源县| 思南县| 遂昌县| 京山县| 古丈县| 南昌县| 平湖市| 莱阳市| 游戏| 望谟县| 华容县| 华蓥市| 于田县| 铜川市| 佛冈县| 资讯 | 修水县| 康保县| 龙南县| 巫山县| 天气|