Spring Cloud Gateway将路由匹配作为Spring WebFlux HandlerMapping基础架构的一部分,Spring Cloud Gateway包括许多内置的路由谓词工厂,所有这些谓词都与HTTP请求的不同属性匹配,可以将多个路由谓词工厂结合使用。
总共有11个路由谓词工厂:
- The After Route Predicate Factory
- The Before Route Predicate Factory
- The Between Route Predicate Factory
- The Cookie Route Predicate Factory
- The Header Route Predicate Factory
- The Host Route Predicate Factory
- The Method Route Predicate Factory
- The Path Route Predicate Factory
- The Query Route Predicate Factory
- The RemoteAddr Route Predicate Factory
- The Weight Route Predicate Factory
时间通过获取:System.out.println(ZonedDateTime.now());
After路由谓词工厂
After route谓词工厂采用一个参数,即datetime(这是一个Java ZonedDateTime),该谓词匹配在指定日期时间之后发生的请求,以下示例配置了路由后谓词:
这条路由符合2017年1月20日17:42:47时间([America/Denver])之后的任何请求;
Before路由谓词工厂
Before路由谓词工厂采用一个参数,即datetime(这是一个Java ZonedDateTime),该谓词匹配在指定日期时间之前发生的请求,下面的示例配置路由之前谓词:
这条路由符合2017年1月20日17:42:47时间([America/Denver])之前的任何请求;
Between路由谓词工厂
路由谓词之间的工厂使用两个参数datetime1和datetime2,它们是java ZonedDateTime对象,该谓词匹配在datetime1之后和datetime2之前发生的请求,datetime2参数必须在datetime1之后,以下示例配置了路由之间的谓词:
该路线与2017年1月20日山区时间(丹佛)之后和2017年1月21日17:42山区时间(丹佛)之前的任何请求相匹配,这对于维护时段可能很有用;
Cookie 路由谓词工厂
Cookie路由谓词工厂采用两个参数,即cookie名称和一个regexp(这是Java正则表达式),该谓词匹配具有给定名称且其值与正则表达式匹配的cookie,以下示例配置Cookie路由谓词工厂:
此路由匹配具有名为Chocolate的cookie的请求,该cookie的值与ch.p正则表达式匹配;
举例:curl http://192.168.0.104/index --cookie chocolate=123456
Header 路由谓词工厂
header 路由谓词工厂使用两个参数,header 名称和一个regexp(这是Java正则表达式),该谓词与具有给定名称的header 匹配,该header 的值与正则表达式匹配,以下示例配置标头路由谓词:
如果请求具有名为X-Request-Id的标头,且其值与\ d +正则表达式匹配(即,其值为一个或多个数字),则此路由匹配;
举例:curl http://192.168.0.104/index --header “X-Request-Id:19228”
Host 路由谓词工厂
host路由谓词工厂使用一个参数:主机名模式列表,以下示例配置主机路由谓词:
还支持URI模板变量(例如{sub} .myhost.org),如果请求的主机标头的值为www.somehost.org或beta.somehost.org或www.anotherhost.org,则此路由匹配(按照图中,并非上面举例);
Method 路由谓词工厂
方法路由谓词工厂使用方法参数,该参数是一个或多个参数:要匹配的HTTP方法,以下示例配置方法route谓词:
如果请求方法是GET或POST,则此路由匹配;
Path路由谓词工厂
路径路由谓词工厂使用两个参数:Spring PathMatcher模式列表和一个称为matchOptionalTrailingSeparator的可选标志,以下示例配置路径路由谓词:
如果请求路径为例如/red/1或/red/blue或/blue/green,则此路由匹配;
Query路由谓词工厂
查询路由谓词工厂采用两个参数:必需的参数和可选的regexp(这是Java正则表达式),以下示例配置查询路由谓词:
如果请求包含green查询参数,则前面的路由匹配;
RemoteAddr 路由谓词工厂
RemoteAddr路由谓词工厂使用源列表(最小大小为1),这些源是标记(IPv4或IPv6)字符串,例如192.168.0.1/16(其中192.168.0.1是IP地址,而16是子网掩码)),下面的示例配置RemoteAddr路由谓词:
如果请求的远程地址是例如192.168.1.10,则此路由匹配;
Weight 路由谓词工厂
权重路由谓词工厂采用两个参数:group和weight(一个int),权重是按组计算的,以下示例配置权重路由谓词:
这条路由会将约80%的流量转发至weighthigh.org,并将约20%的流量转发至weightlow.org;