spring cloud gateway 2 深入了解 - Predicate

示例項目:https://github.com/14251104246/spring-cloud-gateway-demo/tree/Predicate

spring cloud gateway 通過謂詞(Predicate)來匹配來自用戶的請求

為了方便,使用postman測試不同的謂詞的效果

路徑謂詞(Predicate)—— 最簡單的謂詞

  • 配置如下
spring:
  cloud:
    gateway:
      routes:
        # 匹配指定路徑的路由
      - id: path_route
        uri: http://www.baidu.com
        predicates:
        - Path=/baidu/**
        filters:
        - StripPrefix=1
  • Path謂詞配置的- Path=/baidu/**的作用是:匹配所有請求路徑以http://localhost:8888/baidu開頭的用戶請求
  • 用postman請求http://localhost:8888/baidu,返回百度網(wǎng)頁的HTML,效果如圖
image.png

cookie謂詞

  • 配置如下
spring:
  cloud:
    gateway:
      routes:
        # 匹配指定cookie的路由
      - id: cookie_route
        uri: http://www.taobao.com
        predicates:
        - Cookie=chocolate, value
  • Cookie謂詞配置的- Cookie=chocolate, value的作用是:匹配請求中存在cookiechocolate=value的所有請求
    • 注意:- Cookie=chocolate, value中的value是正則表達式
  • 用postman隨便請求一個urlhttp://localhost:8888/1111111,只要存在cookiechocolate=value,都網(wǎng)關(guān)都會匹配到對應(yīng)路由,最后返回淘寶的HTML,效果如圖
image.png

請求頭謂詞

  • 配置如下
spring:
  cloud:
    gateway:
      routes:
        # 匹配指定請求頭的路由
      - id: header_route
        uri: http://www.jd.com/
        predicates:
        - Header=X-Request-Id, \d+
  • Header謂詞配置的- Header=X-Request-Id, \d+的作用是:匹配請求頭中存在符合條件“key為X-Request-Id,value為數(shù)字”的所有請求
    • 注意:Header=X-Request-Id, \d+,第二個參數(shù)是正則表達式,如\d+
  • 用postman隨便請求一個urlhttp://localhost:8888/2222222,只要請求頭中符合key為X-Request-Id,value為數(shù)字,都網(wǎng)關(guān)都會匹配到對應(yīng)路由,最后返回京東的HTML,效果如圖
image.png

請求參數(shù)謂詞

  • 配置如下
spring:
  cloud:
    gateway:
      routes:
        # 匹配指定請求參數(shù)的路由
      - id: cookie_route
        uri: http://tmall.com/
        predicates:
        - Query=param1,value
  • 上面請求參數(shù)謂詞- Query=param1,value的含義是: 匹配所有含有請求參數(shù)param1且它的值符合正則表達式value的請求

    • 注意:- Query=param1,value中的value是正則表達式
    • 注意:- Query=param1,value中的value可以省略
      • 即可變成- Query=param1,這是匹配所有請求參數(shù)含有param1的請求并且不篩選值
  • 效果如下

image.png

其他謂詞

  • host謂詞匹配對應(yīng)的host,如下匹配www.somehost.orgbeta.somehost.org
spring:
  cloud:
    gateway:
      routes:
      - id: host_route
        uri: http://example.org
        predicates:
        - Host=**.somehost.org
  • Method方法謂詞匹配如get,post等請求的方法
spring:
  cloud:
    gateway:
      routes:
      - id: method_route
        uri: http://example.org
        predicates:
        - Method=GET
  • RemoteAddr為ip地址謂詞,匹配對應(yīng)ip地址
spring:
  cloud:
    gateway:
      routes:
      - id: remoteaddr_route
        uri: http://example.org
        predicates:
        - RemoteAddr=192.168.1.1/24
  • After、Before、Between等時間謂詞,分別匹配在某時之后,之前,和某段時間內(nèi)的請求

謂詞組合

  • 不同謂詞之間可以組合使用。它們同時存在于同一個路由時,請求必須同時滿足所有的謂詞條件才被這個路由匹配。
    • 注意:一個請求滿足多個路由的謂詞條件時,請求只會被首個成功匹配的路由轉(zhuǎn)發(fā)
  • 配置如下
spring:
  cloud:
    gateway:
      routes:
        # 匹配指定請求參數(shù)和請求頭的路由
      - id: compose_route
        uri: http://www.oschina.net/
        predicates:
        - Query=param2
        - Header=Header-Route,value
  • 效果如下
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容