spring cloud gateway路由谓词工厂

Spring Cloud Gateway 匹配路由作为 Spring WebFluxHandlerMapping基础设施的一部分。Spring Cloud Gateway 包含许多内置的路由谓词工厂。所有这些谓词都匹配 HTTP 请求的不同属性。您可以将多个路由谓词工厂与逻辑and语句组合在一起。

1. 后路由谓词工厂

所述After路线谓词工厂有一个参数,一个datetime(其是Java ZonedDateTime)。此谓词匹配在指定日期时间之后发生的请求。以下示例配置了一个 after 路由谓词:

spring:
  cloud:
    gateway:
      routes:
      - id: after_route
        uri: https://example.org
        predicates:
        - After=2017-01-20T17:42:47.789-07:00[America/Denver]

此路由匹配 2017 年 1 月 20 日 17:42 山地时间(丹佛)之后提出的任何请求。

2. 路由前谓词工厂

所述Before路线谓词工厂有一个参数,一个datetime(其是Java ZonedDateTime)。此谓词匹配发生在指定 之前的请求datetime。以下示例配置了一个 before 路由谓词:

spring:
  cloud:
    gateway:
      routes:
      - id: before_route
        uri: https://example.org
        predicates:
        - Before=2017-01-20T17:42:47.789-07:00[America/Denver]

此路由匹配 2017 年 1 月 20 日 17:42 山地时间(丹佛)之前提出的任何请求。

3. 路由谓词工厂之间

该Between路线谓词工厂有两个参数,datetime1并且datetime2 这是JavaZonedDateTime对象。此谓词匹配发生在 之后datetime1和之前的请求datetime2。该datetime2参数必须是后datetime1。以下示例配置了一个 between 路由谓词:

spring:
  cloud:
    gateway:
      routes:
      - id: between_route
        uri: https://example.org
        predicates:
        - Between=2017-01-20T17:42:47.789-07:00[America/Denver], 2017-01-21T17:42:47.789-07:00[America/Denver]

此路由匹配 2017 年 1 月 20 日 17:42 山地时间(丹佛)之后和 2017 年 1 月 21 日 17:42 山地时间(丹佛)之前提出的任何请求。这对于维护窗口很有用。

4. Cookie 路由谓词工厂

所述Cookie路线谓词工厂采用两个参数,该cookiename和regexp(其是Java正则表达式)。此谓词匹配具有给定名称且其值与正则表达式匹配的 cookie。以下示例配置 cookie 路由谓词工厂:

spring:
  cloud:
    gateway:
      routes:
      - id: cookie_route
        uri: https://example.org
        predicates:
        - Cookie=chocolate, ch.p

此路由匹配具有名称chocolate与ch.p正则表达式匹配的cookie 的请求。

5. 标头路由谓词工厂

所述Header路线谓词工厂采用两个参数,报头name和一个regexp(其是Java正则表达式)。此谓词与具有给定名称的标头匹配,其值与正则表达式匹配。以下示例配置标头路由谓词:

示例 5. application.yml
spring:
cloud:
gateway:
routes:
- id: header_route
uri: https://example.org
predicates:
- Header=X-Request-Id, \d+
如果请求的标头名称X-Request-Id与\d+正则表达式匹配(即,它的值为一位或多位数字),则此路由匹配。

6. 主机路由谓词工厂

该Host路线谓词工厂需要一个参数:主机名的列表patterns。该模式是一个 Ant 风格的模式,以.作为分隔符。此谓词匹配Host与模式匹配的标头。以下示例配置主机路由谓词:

spring:
  cloud:
    gateway:
      routes:
      - id: host_route
        uri: https://example.org
        predicates:
        - Host=**.somehost.org,**.anotherhost.org

{sub}.myhost.org还支持URI 模板变量(例如)。

如果请求具有这种路由匹配Host用的头值www.somehost.org或beta.somehost.org或www.anotherhost.org。

此谓词提取 URI 模板变量(例如sub,在前面的示例中定义的)作为名称和值的映射,并将其放置在 中ServerWebExchange.getAttributes(),键定义在 中ServerWebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE。然后这些值可供工厂使用GatewayFilter

7. 方法路由谓词工厂

所述Method路线谓词厂需要methods的参数,它是一个或多个参数:HTTP方法来匹配。以下示例配置方法路由谓词:

示例 7. application.yml
spring:
  cloud:
    gateway:
      routes:
      - id: method_route
        uri: https://example.org
        predicates:
        - Method=GET,POST

如果请求方法是 aGET或 a ,则此路由匹配POST。

8. 路径路由谓词工厂

该Path路线谓词厂有两个参数:春天的列表PathMatcher patterns和所谓的可选标志matchTrailingSlash(默认true)。以下示例配置路径路由谓词:

spring:
  cloud:
    gateway:
      routes:
      - id: path_route
        uri: https://example.org
        predicates:
        - Path=/red/{segment},/blue/{segment}

如果请求路径是,例如:/red/1or /red/1/or /red/blueor ,则此路由匹配/blue/green。

如果matchTrailingSlash设置为false,则/red/1/不会匹配请求路径。

此谓词提取 URI 模板变量(例如segment,在前面的示例中定义的)作为名称和值的映射,并将其放置在 中ServerWebExchange.getAttributes(),键定义在 中ServerWebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE。然后这些值可供工厂使用GatewayFilter

可以使用实用方法(称为get)来更轻松地访问这些变量。以下示例显示了如何使用该get方法:

Map<String, String> uriVariables = ServerWebExchangeUtils.getPathPredicateVariables(exchange);

String segment = uriVariables.get(“segment”);

9. 查询路由谓词工厂

所述Query路线谓词工厂采用两个参数:所要求的param和可选的regexp(其是Java正则表达式)。以下示例配置查询路由谓词:

spring:
  cloud:
    gateway:
      routes:
      - id: query_route
        uri: https://example.org
        predicates:
        - Query=green

如果请求包含green查询参数,则前面的路由匹配。

spring:
  cloud:
    gateway:
      routes:
      - id: query_route
        uri: https://example.org
        predicates:
        - Query=red, gree.

如果请求包含red其值与正则gree.表达式匹配的查询参数,则前面的路由匹配,因此green和greet将匹配。

10. RemoteAddr 路由谓词工厂

所述RemoteAddr路线谓词工厂需要的列表(分钟尺寸1) sources,其是CIDR的表示法(IPv4或IPv6)的字符串,如192.168.0.1/16(其中192.168.0.1是一个IP地址和16一个子网掩码)。以下示例配置 RemoteAddr 路由谓词:

spring:
  cloud:
    gateway:
      routes:
      - id: remoteaddr_route
        uri: https://example.org
        predicates:
        - RemoteAddr=192.168.1.1/24

例如,如果请求的远程地址是 ,则此路由匹配192.168.1.10。

11. 权重路由谓词工厂

该Weight路线谓词工厂有两个参数:group和weight(一个int)。权重是按组计算的。以下示例配置权重路由谓词:

spring:
  cloud:
    gateway:
      routes:
      - id: weight_high
        uri: https://weighthigh.org
        predicates:
        - Weight=group1, 8
      - id: weight_low
        uri: https://weightlow.org
        predicates:
        - Weight=group1, 2

该路由会将约 80% 的流量转发到weighthigh.org,将约 20% 的流量转发到weightlow.org

原文:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值