1. Predicate的使用
Spring Cloud Gateway将路由匹配作为Spring WebFlux HandlerMapping基础架构的一部分。
Spring Cloud Gateway包括许多内置的Route Predicate工厂。所有这些Predicate都与HTTP请求的不同属性匹配。多个RoutePredicate厂可以进行组合
Spring Cloud Gateway创建Route对象时,使用RoutePredicateFactory创建Predicate对象,Predicate 对象可以赋值给Route。Spring Cloud Gateway包含许多内置的Route Predicate Factories.
所有这些谓词都匹配HTTP请求的不同属性。多种谓词工厂可以组合,并通过逻辑and。
1.1 常用的Route Predicate
1.1.1 After Route Predicate
after路由谓词工厂接受一个参数,一个datetime。此谓词匹配发生在指定日期时间之后的请求。
yml:
可以正常访问,
当修改时间为"明天“
1.1.2 Before Route Predicate
before route谓词工厂接受一个参数,即datetime。此谓词匹配发生在指定日期时间之前的请求。
同上,只有请求时间在指定日期之前可访问。
1.1.3 Between Route Predicate Factory
同上:请求的时间需要在指定的两个时间段内
路由之间的谓词工厂接受两个参数,datetime1和datetime2。此谓词匹配发生在datetime1之后和datetime2之前的请求。datetime2参数必须位于datetime1之后。
1.1.4 Cookie Route Predicate Factory
cookie路由谓词工厂接受两个参数,cookie名称和一个正则表达式。此谓词匹配具有给定名称且其值与正则表达式匹配的cookie。
yml:
get请求
curl http://localhost:9527/payment/lb --cookie "username=zhangl”
1.1.5 Header Route Predicate Factory
头路由谓词工厂接受两个参数,头名称和一个正则表达式。此谓词与具有给定名称的头匹配,该头的值与正则表达式匹配。
curl http://localhost:9527/payment/lb -H "X-Request-Id:123" --cookie "username=zhangl”
1.1.6 Host Route Predicate
主机路由谓词工厂接受一个参数:主机名模式列表。该模式是一个ant样式的模式。作为分隔符。此谓词匹配与模式匹配的主机头。
curl -H Host:www.liang.com localhost:9527/payment/lb
1.1.7 Method Route Predicate
方法路由谓词工厂接受一个或多个参数:要匹配的HTTP方法
如果请求方法是GET或POST,则此路由匹配。
1.1.8 Path Route Predicate
路径路由谓词工厂接受两个参数:Spring PathMatcher模式列表和一个称为matchOptionalTrailingSeparator的可选标志。
1.1.9 Query Route Predicate
查询路由谓词工厂接受两个参数:一个必需的参数和一个可选的regexp。
Predicate就是为了实现一组匹配规则,让请求过来找到对应的Route进行处理