溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Spring Cloud Gateway 內(nèi)置的路由謂詞工廠

發(fā)布時(shí)間:2020-06-20 10:13:24 來源:網(wǎng)絡(luò) 閱讀:752 作者:ZeroOne01 欄目:編程語言

本文基于Spring Cloud Greenwich SR2

[TOC]


內(nèi)置的路由謂詞工廠

Spring Cloud Gateway內(nèi)置了一系列的路由謂詞工廠,以便我們可以在開發(fā)中靈活的使用Gateway進(jìn)行請(qǐng)求轉(zhuǎn)發(fā)。我這里將Gateway內(nèi)置的所有路由謂詞工廠整理成了表格,如下:

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

相關(guān)源碼也整理成了思維導(dǎo)圖:
Spring Cloud Gateway 內(nèi)置的路由謂詞工廠


After

配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: after_route
        uri: lb://example-service
        predicates:
        # 當(dāng)且僅當(dāng)請(qǐng)求時(shí)的時(shí)間After配置的時(shí)間時(shí),才轉(zhuǎn)發(fā)該請(qǐng)求
        # 若請(qǐng)求時(shí)的時(shí)間不是After配置的時(shí)間時(shí),則會(huì)返回404 not found
        - After=2018-08-16T11:34:42.917822900+08:00[Asia/Shanghai]

注意:當(dāng)predicates配置項(xiàng)只配置了一個(gè)Predicate且沒有配置Path時(shí),Path的默認(rèn)值為/**。所以該段配置會(huì)使訪問 GATEWAY_URL/** 時(shí)轉(zhuǎn)發(fā)到 user-center微服務(wù)的/**

Tips:使用以下代碼可以打印帶有時(shí)區(qū)的當(dāng)前時(shí)間,然后再自行修改成特定時(shí)間即可:

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

Before

配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: before_route
        uri: lb://example-service
        predicates:
        # 當(dāng)且僅當(dāng)請(qǐng)求時(shí)的時(shí)間Before配置的時(shí)間時(shí),才轉(zhuǎn)發(fā)該請(qǐng)求
        - Before=2018-08-16T11:34:42.917822900+08:00[Asia/Shanghai]
Between

配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: between_route
        uri: lb://example-service
        predicates:
        # 當(dāng)且僅當(dāng)請(qǐng)求時(shí)的時(shí)間Between配置的時(shí)間段時(shí),才轉(zhuǎn)發(fā)該請(qǐng)求
        - 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:
        # 當(dāng)且僅當(dāng)請(qǐng)求帶有名為chocolate,并且值符合正則表達(dá)式 ch.p 的Cookie時(shí),才轉(zhuǎn)發(fā)該請(qǐng)求
        - Cookie=chocolate, ch.p
Header

配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: header_route
        uri: lb://example-service
        predicates:
        # 當(dāng)且僅當(dāng)請(qǐng)求帶有名為X-Request-Id,并且值符合正則表達(dá)式 \d+ 的Header時(shí),才轉(zhuǎn)發(fā)該請(qǐng)求
        - Header=X-Request-Id, \d+
Host

配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: host_route
        uri: lb://example-service
        predicates:
        # 當(dāng)且僅當(dāng)名為Host的Header符合**.somehost.org或**.anotherhost.org時(shí),才轉(zhuǎn)發(fā)該請(qǐng)求
        # 例如: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:
        # 當(dāng)且僅當(dāng)HTTP請(qǐng)求方法為GET時(shí),才轉(zhuǎn)發(fā)該請(qǐng)求
        - Method=GET
Path

配置示例:

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

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

  • Path Route Predicate Factory
Query

配置示例1:

spring:
  cloud:
    gateway:
      routes:
      - id: query_route
        uri: lb://example-service
        predicates:
        # 當(dāng)且僅當(dāng)請(qǐng)求帶有名為baz的參數(shù),才轉(zhuǎn)發(fā)該請(qǐng)求
        - Query=baz

配置示例2:

spring:
  cloud:
    gateway:
      routes:
      - id: query_route
        uri: lb://example-service
        predicates:
        # 當(dāng)且僅當(dāng)請(qǐng)求帶有名為foo的參數(shù),且參數(shù)值與正則表達(dá)式 ba. 相匹配,才轉(zhuǎn)發(fā)該請(qǐng)求
        - Query=foo, ba.
RemoteAddr

配置示例:

spring:
  cloud:
    gateway:
      routes:
      - id: remoteaddr_route
        uri: lb://example-service
        predicates:
        # 當(dāng)且僅當(dāng)請(qǐng)求IP是192.168.1.1/24網(wǎng)段,例如192.168.1.10,才轉(zhuǎn)發(fā)該請(qǐng)求
        - RemoteAddr=192.168.1.1/24

官方文檔:

  • Route Predicate Factories
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI