springcloud-GateWay常用的Predicate


在gateway的yml配置會有下面這個配置:

spring:
  cloud:
    gateway:
      routes:
        - id: payment_routh
          uri: lb://cloud-payment-service
          predicates:
            - Path=/payment/get/**

  主要看predicates屬性,這個屬性其實還可以配置多個屬性,Path只是其中一個。稍微底層一點,這里配置的predicates屬性都有其對應的類來處理,如下:

 

   比如Path的話就由PathRoutePredicate垃圾處理,以此類推,但並不是想講里面的類是怎么處理的,還是解釋其他屬性的含義和用法吧

  1.After。配置如下:

predicates:
  - After=2021-02-24T15:17:25.170+08:00[Asia/Shanghai]

上面配置表示請求必須是在這個時間后請求的,才匹配該斷言(只是匹配當前斷言而已,還需要考慮其他斷言)。還有這個時間倒不難看懂,主要是如何將時間變成這個格式呢,然后獲取呢?參考代碼如下:

    public static void main(String[] args) {
        ZonedDateTime time = ZonedDateTime.now();

        System.out.println(time);
    }

  2.Before,Between;這兩個應該不用說,也是時間相關的,上面會了,這個應該也不難。

  3.Cookie。配置如下:

predicates:
  - Cookie=username,zzyy

  配置表示 請求必須帶有 username的cookie,並且值為zzyy的;這里的值是可以使用正則表達式的

  4.Header,Host;這兩個一起講,因為基本差不多的,配置如下:

predicates:
   - Header=zhangsan,\d+
   - Host=**.baidu.com

  Header是要求請求存在一個請求頭,頭名稱是zhangsan,頭值是正整數(可使用正則表達式);Host表示請求中存在一個請求頭,請求頭名稱為Host,值主要后綴是.baidu.com即可(也可以使用正則表達式)

  5.Path(略)

  6.Method;

predicates:
  - Method=Get

  相信你們能看懂。

  7.Query。

predicates:
  - Query=username,123

  表示請求中必須帶有參數,參數名師username,值為123(同樣可正則)

一般測試請求會使用一些測試工具,但為了方便,使用命令行的curl命令完成測試。下面為測試用例,可參考:

curl http://www.baidu.com
curl http://www.baidu.com --cookie "username=123" #帶cookie
curl http://www.baidu.com --H "Host:localhost"  #帶請求頭
curl http://www.baidu.com?username=zhangsan

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM