溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Cloud Gateway 內置的路由謂詞工廠

發布時間:2020-06-20 10:13:24 來源:網絡 閱讀:786 作者:ZeroOne01 欄目:編程語言

本文基于Spring Cloud Greenwich SR2

[TOC]


內置的路由謂詞工廠

Spring Cloud Gateway內置了一系列的路由謂詞工廠,以便我們可以在開發中靈活的使用Gateway進行請求轉發。我這里將Gateway內置的所有路由謂詞工廠整理成了表格,如下:

路由謂詞工廠 作用 參數
After 當且僅當請求時的時間After配置的時間時,才轉發該請求 一個帶有時區的具體時間
Before 當且僅當請求時的時間Before配置的時間時,才轉發該請求 一個帶有時區的具體時間
Between 當且僅當請求時的時間Between配置的時間段時,才轉發該請求 一個帶有時區的具體時間段
Cookie 當且僅當請求時攜帶的Cookie名稱及值與配置的名稱及值相符時,才轉發該請求 Cookie的名稱及值,支持使用正則表達式來匹配值
Header 當且僅當請求時攜帶的Header名稱及值與配置的名稱及值相符時,才轉發該請求 Header的名稱及值,支持使用正則表達式來匹配值
Host 當且僅當請求時名為Host的Header的值與配置的值相符時,才轉發該請求 Host的值,支持配置多個且支持使用通配符
Method 當且僅當請求時所使用的HTTP方法與配置的請求方法相符時,才轉發該請求 HTTP請求方法,例如GET、POST等
Path 當且僅當請求時所訪問的路徑與配置的路徑相匹配時,才轉發該請求 通配符、占位符或具體的接口路徑,可以配置多個
Query 當且僅當請求時所帶有的參數名稱與配置的參數名稱相符時,才轉發該請求 參數名稱和參數值(非必須),支持使用正則表達式對參數值進行匹配
RemoteAddr 當且僅當請求時的IP地址與配置的IP地址相符時,才轉發該請求 IP地址或IP段

相關源碼也整理成了思維導圖:
Spring Cloud Gateway 內置的路由謂詞工廠


After

配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: after_route
        uri: lb://example-service
        predicates:
        # 當且僅當請求時的時間After配置的時間時,才轉發該請求
        # 若請求時的時間不是After配置的時間時,則會返回404 not found
        - After=2018-08-16T11:34:42.917822900+08:00[Asia/Shanghai]

注意:當predicates配置項只配置了一個Predicate且沒有配置Path時,Path的默認值為/**。所以該段配置會使訪問 GATEWAY_URL/** 時轉發到 user-center微服務的/**

Tips:使用以下代碼可以打印帶有時區的當前時間,然后再自行修改成特定時間即可:

System.out.println(ZonedDateTime.now());

Before

配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: before_route
        uri: lb://example-service
        predicates:
        # 當且僅當請求時的時間Before配置的時間時,才轉發該請求
        - Before=2018-08-16T11:34:42.917822900+08:00[Asia/Shanghai]
Between

配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: between_route
        uri: lb://example-service
        predicates:
        # 當且僅當請求時的時間Between配置的時間段時,才轉發該請求
        - Between=2018-08-16T11:34:42.917822900+08:00[Asia/Shanghai], 2028-08-16T11:34:42.917822900+08:00[Asia/Shanghai]
Cookie

配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: cookie_route
        uri: lb://example-service
        predicates:
        # 當且僅當請求帶有名為chocolate,并且值符合正則表達式 ch.p 的Cookie時,才轉發該請求
        - Cookie=chocolate, ch.p
Header

配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: header_route
        uri: lb://example-service
        predicates:
        # 當且僅當請求帶有名為X-Request-Id,并且值符合正則表達式 \d+ 的Header時,才轉發該請求
        - Header=X-Request-Id, \d+
Host

配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: host_route
        uri: lb://example-service
        predicates:
        # 當且僅當名為Host的Header符合**.somehost.org或**.anotherhost.org時,才轉發該請求
        # 例如:www.somehost.org、beta.somehost.org、www.anotherhost.org等Host就滿足該匹配
        - Host=**.somehost.org,**.anotherhost.org
Method

配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: method_route
        uri: lb://example-service
        predicates:
        # 當且僅當HTTP請求方法為GET時,才轉發該請求
        - Method=GET
Path

配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: path_route
        uri: lb://example-service
        predicates:
        # 當且僅當訪問路徑是/foo/*、/some-example/list及/bar/**時,才轉發該請求
        # segment是一個特殊的占位符,表示單層路徑匹配,而/**則是多層路徑的匹配
        - Path=/foo/{segment},/example/list,/bar/**

Path中配置的url占位符可以在過濾器工廠通過相關API進行獲取,關于這個編程技巧可以參考官方文檔的描述:

  • Path Route Predicate Factory
Query

配置示例1:

spring:
  cloud:
    gateway:
      routes:
      - id: query_route
        uri: lb://example-service
        predicates:
        # 當且僅當請求帶有名為baz的參數,才轉發該請求
        - Query=baz

配置示例2:

spring:
  cloud:
    gateway:
      routes:
      - id: query_route
        uri: lb://example-service
        predicates:
        # 當且僅當請求帶有名為foo的參數,且參數值與正則表達式 ba. 相匹配,才轉發該請求
        - Query=foo, ba.
RemoteAddr

配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: remoteaddr_route
        uri: lb://example-service
        predicates:
        # 當且僅當請求IP是192.168.1.1/24網段,例如192.168.1.10,才轉發該請求
        - RemoteAddr=192.168.1.1/24

官方文檔:

  • Route Predicate Factories
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女