服务网关Gateway——常用的Predicate(断言)

服务网关Gateway——常用的Predicate(断言)
服务网关Gateway——常用的Predicate(断言)
上面用的path 只是predicate 中的一个,只要使predicates为true 就访问,false不访问。

怎么确定predicates是true或者false呢?看上图,uri(lb://cloud-provider-service)下面能找到对应的predicates下面的路径方法就是true,如果找不到则是false

Route PredicateFactories
服务网关Gateway——常用的Predicate(断言)
SpringCloud Gateway将路由匹配作为Spring WebFlux HandlerMapping基础架构的一部分。
SpringCloud Gateway包括许多内置的RoutePredicate工厂。所有这些Predicate都与HTTP请求的不同属性匹配。多个Route Predicate工厂可以进行组合。

SpringCloud Gateway创建Route对象时,使用RoutePredicateFactory创建Predicate对象,Predicate对象可以赋值给Route。SpringCloud Gateway包括许多内置的Route Predicate Factories。

所有这些谓词都匹配HTTP请求的不同属性。多种谓词工厂可以组合,并通过逻辑and。

有哪几种?
服务网关Gateway——常用的Predicate(断言)
After、Before、Between

yml 配置

服务网关Gateway——常用的Predicate(断言)
表示在美国时间(上面的时间)访问这个路径才有效。但是这是美国时间,我们自己通过下面的方式获取的是亚洲上海时间
服务网关Gateway——常用的Predicate(断言)
获取亚洲时间以后更换美国时间。
服务网关Gateway——常用的Predicate(断言)
如果没有在after规定的时间之前访问的话,这个路由是不通的,访问会是失败的。
服务网关Gateway——常用的Predicate(断言)
After是在时间之后,Before是在时间之前,Between是在之间,需要传两个时间,就不详细写了

Cookie
服务网关Gateway——常用的Predicate(断言)
修改yml:
服务网关Gateway——常用的Predicate(断言)
重启9527,使用curl 命令测试(curl是postman 图形化界面的命令)
启动 cmd命令界面

不带cookie访问:
服务网关Gateway——常用的Predicate(断言)
404 not found不让访问,再来看带cookie:
服务网关Gateway——常用的Predicate(断言)
这样,时间上匹配且带着cookie就能访问了。

Header
服务网关Gateway——常用的Predicate(断言)
修改 yml

重启9527,使用curl 命令测试

服务网关Gateway——常用的Predicate(断言)
Host
服务网关Gateway——常用的Predicate(断言)
修改yml
服务网关Gateway——常用的Predicate(断言)
重启,测试
服务网关Gateway——常用的Predicate(断言)
Method
服务网关Gateway——常用的Predicate(断言)
只有请求方法是GET方法才允许访问

Query
服务网关Gateway——常用的Predicate(断言)
修改yml
服务网关Gateway——常用的Predicate(断言)
重启,测试
服务网关Gateway——常用的Predicate(断言)
小总结

说白了,Predicate就是为了实现一组匹配规则,让请求过来找对应的Route进行处理。

相关文章: