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

本文基於Spring Cloud Greenwich SR2html

[TOC]java


內置的路由謂詞工廠

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 內置的路由謂詞工廠spring


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微服務的/**cookie

Tips:使用如下代碼能夠打印帶有時區的當前時間,而後再自行修改爲特定時間便可:ide

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

配置示例:url

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

配置示例:3d

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進行獲取,關於這個編程技巧能夠參考官方文檔的描述:

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

官方文檔:

相關文章
相關標籤/搜索