Spring Cloud Gateway 内置的路由谓词工厂
本文基于Spring Cloud Greenwich SR2
[TOC]
内置的路由谓词工厂
Spring Cloud Gateway内置了一系列的路由谓词工厂,以便我们可以在开发中灵活的使用Gateway进行请求转发。我这里将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进行获取,关于这个编程技巧可以参考官方文档的描述:
配置示例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
官方文档:
Route Predicate Factories声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。