Spring Cloud Gateway 03 内置的路由谓词工厂

Spring Cloud Gateway 03 内置的路由谓词工厂

参考:
https://cloud.tencent.com/developer/article/1538105
https://blog.51cto.com/zero01/2430084

内置的路由谓词工厂

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段
  • 相关源码思维导图:
    在这里插入图片描述
  1. 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());
  1. 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]
  1. 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]
  1. Cookie 配置示例:
spring:
  cloud:
    gateway:
      routes:
      - id: cookie_route
        uri: lb://example-service
        predicates:
        # 当且仅当请求带有名为chocolate,并且值符合正则表达式 ch.p 的Cookie时,才转发该请求
        - Cookie=chocolate, ch.p
  1. Header 配置示例:
spring:
  cloud:
    gateway:
      routes:
      - id: header_route
        uri: lb://example-service
        predicates:
        # 当且仅当请求带有名为X-Request-Id,并且值符合正则表达式 \d+ 的Header时,才转发该请求
        - Header=X-Request-Id, \d+
  1. 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
  1. Method 配置示例:
spring:
  cloud:
    gateway:
      routes:
      - id: method_route
        uri: lb://example-service
        predicates:
        # 当且仅当HTTP请求方法为GET时,才转发该请求
        - Method=GET
  1. 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进行获取
  1. 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.
  1. 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

若有凝问或错误,请指出,我好及时改正,让我们一起进步!
email : binary_space@126.com
qq : 103 586 2795
敲门砖: 代码谱写人生

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值