JAVA全系列 教程
3762个小节阅读:7090.3k
目录
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
一个请求在抵达网关层后,首先就要进行断言匹配,在满足所有断言之后才会进入Filter阶段。说白了Predicate就是一种路由规则,通过Gateway中丰富的内置断言的组合,我们就能让一个请求找到对应的Route来处理。
After Route Predicate Factory采用一个参数——日期时间。在该日期时间之后发生的请求都将被匹配。
YML文件添加配置
xxxxxxxxxx
predicates:
# 路径相匹配的进行路由
- Path=/payment/**
- After=2030-02-15T14:54:23.317+08:00[Asia/Shanghai]
注意:
UTC时间格式的时间参数。
UTC时间格式的时间参数时间生成方法
xxxxxxxxxx
public static void main(String[] args) {
ZonedDateTime now = ZonedDateTime.now();
System.out.println(now);
}
Before Route Predicate Factory采用一个参数——日期时间。在该日期时间之前发生的请求都将被匹配。
YML文件添加配置
xxxxxxxxxx
predicates:
- Before=2030-02-15T14:54:23.317+08:00[Asia/Shanghai]
Between 路由断言 Factory有两个参数,datetime1和datetime2。在datetime1和datetime2之间的请求将被匹配。datetime2参数的实际时间必须在datetime1之后。
xxxxxxxxxx
predicates:
- Between=2030-02-15T14:54:23.317+08:00[Asia/Shanghai],2030-02-15T14:54:23.317+08:00[Asia/Shanghai]
顾名思义,Cookie验证的是Cookie中保存的信息,Cookie断言和上面介绍的两种断言使用方式大同小异,唯一的不同是它必须连同属性值一同验证,不能单独只验证属性是否存在。
YML文件添加配置
xxxxxxxxxx
predicates:
# 路径相匹配的进行路由
- Cookie=username,zzyy
使用postman测试
这个断言会检查Header中是否包含了响应的属性,通常可以用来验证请求是否携带了访问令牌。
YML文件添加配置
xxxxxxxxxx
# 请求头要有X-Request-Id属性并且值为整数的正则表达式
predicates:
- Header=X-Request-Id, \d+
测试
Host 路由断言 Factory包括一个参数:host name列表。使用Ant路径匹配规则, .
作为分隔符。访问的主机匹配http或者https, baidu.com 默认80端口, 就可以通过路由。 多个,
号隔开。
YML文件添加配置
xxxxxxxxxx
predicates:
- Host=itbaizhan
Host文件新增配置
xxxxxxxxxx
127.0.0.1 itbaizhan
这个断言是专门验证HTTP Method的,在下面的例子中,我们把Method断言和Path断言通过一个and连接符合并起来,共同作用于路由判断,当我们访问“/gateway/sample”并且HTTP Method是GET的时候,将适配下面的路由。
YML文件添加配置
xxxxxxxxxx
spring:
cloud:
gateway:
routes:
# 路由ID,没有固定规则但要求唯一,建议配合服务名
- id: payment_provider
# 匹配后提供服务的路由地址
uri: lb://CLOUD-PAYMENT-PROVIDER
# 断言
predicates:
# 路径相匹配的进行路由
- Path=/payment/**
- Method=GET
请求断言也是在业务中经常使用的,它会从ServerHttpRequest中的Parameters列表中查询指定的属性,有如下两种不同的使用方式。
YML文件添加配置
xxxxxxxxxx
spring:
cloud:
gateway:
routes:
# 路由ID,没有固定规则但要求唯一,建议配合服务名
- id: payment_provider
# 匹配后提供服务的路由地址
uri: lb://CLOUD-PAYMENT-PROVIDER
# 断言
predicates:
# 路径相匹配的进行路由
- Path=/payment/**
# 要有参数名称并且是正整数才能路由
- Query=username,\d+
1.服务网关Gateway中在该日期时间之后发生的请求都将被匹配,使用路由断言。
A After
B Before
C Cookie
D Header
2.服务网关Gateway中检查Header中是否包含了响应的属性,使用路由断言。
A After
B Before
C Cookie
D Header
1=>A 2=>D