前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务网关组件 - Spring Cloud Gateway 内置的路由谓词工厂(二十四)

微服务网关组件 - Spring Cloud Gateway 内置的路由谓词工厂(二十四)

作者头像
用户1212940
发布2019-11-13 14:00:51
7540
发布2019-11-13 14:00:51
举报
文章被收录于专栏:LambdaLambdaLambda

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/pyycsd/article/details/103041040

本文基于Spring Cloud Greenwich SR2


内置的路由谓词工厂

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段

相关源码也整理成了思维导图:

11464886-083d29084ec7ea7d
11464886-083d29084ec7ea7d

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


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());

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

配置示例:

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

配置示例:

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

官方文档:

原文:https://blog.51cto.com/zero01/2430084

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 内置的路由谓词工厂
    • After
      • Before
        • Between
          • Cookie
            • Header
              • Host
                • Method
                  • Path
                    • Query
                      • RemoteAddr
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档