当前位置:   article > 正文

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

网关 predicates

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

在这里插入图片描述
在这里插入图片描述
上面用的path 只是predicate 中的一个,只要使predicates为true 就访问,false不访问。

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

Route PredicateFactories
在这里插入图片描述
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。

有哪几种?
在这里插入图片描述
After、Before、Between

yml 配置

在这里插入图片描述
表示在美国时间(上面的时间)访问这个路径才有效。但是这是美国时间,我们自己通过下面的方式获取的是亚洲上海时间
在这里插入图片描述
获取亚洲时间以后更换美国时间。
在这里插入图片描述

意思是说只有在after规定的时间以后访问上面的路径才是有效的

如果没有在after规定的时间之前访问的话,这个路由是不通的,访问会是失败的。
在这里插入图片描述
After是在时间之后,Before是在时间之前,Between是在之间,需要传两个时间,就不详细写了

Cookie

说明:你是需要带cookie访问和不带cookie访问,甚至你是正常的cookie才能访问。

在这里插入图片描述
修改yml:

cookie后面需要两个参数:Cookie name 和 正则表达式
路由规则会通过获取对应的cookie name值和正则表达式去匹配,
如果匹配上就会执行路由
如果没有匹配则不执行

在这里插入图片描述
重启9527,使用curl 命令测试(curl是postman 图形化界面的命令)
启动 cmd命令界面

不带cookie访问:
只是发了一个get请求
在这里插入图片描述
404 not found不让访问,再来看带cookie:
在这里插入图片描述
这样,时间上匹配且带着cookie就能访问了。

Header

在这里插入图片描述
修改 yml

- id: payment_routh2 #payment_routh   #路由的ID,没有固定规则但要求唯一,简易配合服务名
          #uri: http://localhost:8001          #匹配后提供服务的路由地址
          uri: lb://cloud-payment-service
          predicates:
            - Path=/payment/lb/**             #断言,路径相匹配的进行路由
            - After=2020-04-08T10:17:56.489+08:00[Asia/Shanghai]
            - Cookie=username,zzyy
            - Header=X-Request-Id,\b+ #请求头要有X-Request-Id属性并且值为整数的正则表达式
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

带两个参数:一个是属性名和一个是正则表达式
这个属性值和正则表达式匹配则执行

重启9527,使用curl 命令测试

后面需要跟整数,不是整数不能访问
在这里插入图片描述

Host

在这里插入图片描述
修改yml
在这里插入图片描述
重启,测试
在这里插入图片描述

Method

在这里插入图片描述
只有请求方法是GET方法才允许访问

Query(携带查询条件的)

在这里插入图片描述
修改yml
在这里插入图片描述
重启,测试
在这里插入图片描述
小总结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/302133
推荐阅读
相关标签
  

闽ICP备14008679号