spring cloud gateway谓词工厂 Predicate Factory
最佳答案 问答题库828位专家为你答疑解惑
Predicate Factory 称为谓词工厂或断言工厂
默认的工厂类都位于 org.springframework.cloud.gateway.handler.predicate 包下
根据版本不同有多有少
本文spring-cloud.version=2021.0.5 spring-cloud-gateway=3.1.4
官方文档:https://docs.spring.io/spring-cloud-gateway/reference/spring-cloud-gateway/request-predicates-factories.html
官方文档2:https://cloud.spring.io/spring-cloud-gateway/multi/multi_gateway-request-predicates-factories.html
类型
工厂类
基于时间的谓词工厂
AfterRoutePredicateFactory
时间点之后
BeforeRoutePredicateFactory
时间点之前
BetweenRoutePredicateFactory
时间段中间
请求头
CookieRoutePredicateFactory
请求头cookie
HeaderRoutePredicateFactory
请求头
HostRoutePredicateFactory
请求头Host
请求体
ReadBodyRoutePredicateFactory
请求体
请求
MethodRoutePredicateFactory
请求方式post get put等
PathRoutePredicateFactory
请求路径
QueryRoutePredicateFactory
请求查询参数
RemoteAddrRoutePredicateFactory
远程地址,可自定义解析远程ip
XForwardedRemoteAddrRoutePredicateFactory
远程地址,通过 X-Forwarded-For 头解析远程ip
权重
WeightRoutePredicateFactory
按权重分配,group和weight
云平台
CloudFoundryRouteServiceRoutePredicateFactory
基于CloudFoundry云平台的路由分配,CloudFoundry可看做对标K8s的开源PaaS平台
一、基于时间的谓词工厂
(一)、AfterRoutePredicateFactory
这个断言接收一个时间参数(java ZonedDateTime类型),断言匹配在指定日期时间之后发生的请求。 下面是例子
application.yml
spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- After=2023-09-26T08:00:00.000+08:00[Asia/Shanghai]
这个路由匹配东八区2023年9月26日8点之后的任何请求。
(二)、BeforeRoutePredicateFactory
这个断言接收一个时间参数(java ZonedDateTime类型),断言匹配在指定日期时间之前发生的请求。 下面是例子
application.yml
spring:cloud:gateway:routes:- id: before_routeuri: https://example.orgpredicates:- Before=2023-09-26T08:00:00.000+08:00[Asia/Shanghai]
这个路由匹配东八区2023年9月26日8点之前的任何请求。
(三)、BetweenRoutePredicateFactory
这个断言接收两个时间参数(java ZonedDateTime类型),断言匹配在两个时间之前发生的请求。第二个时间参数必须大于第一个时间参数。 下面是例子
spring:cloud:gateway:routes:- id: between_routeuri: https://example.orgpredicates:- Between=2023-09-26T08:00:00.000+08:00[Asia/Shanghai], 2023-09-27T08:00:00.000+08:00[Asia/Shanghai]
这个路由匹配东八区2023年9月26日8点之后且在2023年9月27日8点之前的任何请求。
二、请求头
(一)、CookieRoutePredicateFactory
这个断言接收两个参数,cookie名和正则表达式regexp,正则表达式是String.matche()里的参数,断言匹配cookie名对应的值符合正则表达式的请求。 下面是例子
application.yml
spring:cloud:gateway:routes:- id: cookie_routeuri: https://example.orgpredicates:- Cookie=chocolate, ch.p
这个路由匹配cookie名为chocolate,并且值符合正则表达式ch.p的请求。
TBD
三、请求体
TBD
四、请求
TBD
五、权重
TBD
六、云平台
(一)、CloudFoundryRouteServiceRoutePredicateFactory
基于CloudFoundry云平台的路由分配,CloudFoundry可看做对标K8s的开源PaaS平台,目前这个谓词官方文档没有解释,通过查看相关代码提交发现,这是为了支持CloudFoundry云平台里的CF Router Service组件,它判断header里面是否有属性:X-CF-Forwarded-Url、X-CF-Proxy-Signature和X-CF-Proxy-Metadata。当header里面同时有上述三个属性时,请求被转发。请求头里的url带的url是动态的。
相关github pull提交:Add predicate to detect requests made for a Cloud Foundry route service by fitzoh · Pull Request #241 · spring-cloud/spring-cloud-gateway · GitHub
相关github issue:Support CF Route Services · Issue #190 · spring-cloud/spring-cloud-gateway · GitHub
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"spring cloud gateway谓词工厂 Predicate Factory":http://eshow365.cn/6-14829-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!