内置断言
在网关配置中使用了predicates(断言)的配置
断言的意思就是判断某个条件是否满足
我们之前使用了Path断言,判断请求的路径是不是满足条件,例如是不是/sh/** /bj/**
如果路径满足这个条件,就路由到指定的服务器
但是Path实际上只是SpringGateway提供的多种内置断言中的一种
还有很多其它断言
- after
- before
- between
- cookie
- header
- host
- method
- path
- query
- remoteaddr
时间相关
after,before,between
判断当前时间在指定时间之前,之后或之间的操作
如果条件满足可以执行路由操作,否则拒绝访问
表示时间的格式比较特殊,先使用下面代码获得时间
ZonedDateTime.now()
运行程序输出,可获得当前时间,这个时间的格式可能是
2022-09-27T10:19:46.898+08:00[Asia/Shanghai]
下面在yml配置中添加新的断言配置
使用After设置必须在指定时间之后访问
routes:
- id: gateway-shanghai
uri: lb://shanghai
predicates:
- Path=/sh/**
# 当前断言是两个条件,第一是路径必须用/sh/开头
# 第二是访问的时间必须在下面指定的时间之后, 而且两个条件必须同时满足,才能路由
- After=2022-09-27T10:29:00.898+08:00[Asia/Shanghai]
必须在指定时间之后才能访问服务
否则发生404错误拒绝访问
需要注意测试时,先启动Nacos,再启动shanghai之后启动gateway
测试时必须通过9000端口访问才能有效果
使用Before设置必须在指定时间之前访问
routes:
- id: gateway-shanghai
uri: lb://shanghai
predicates:
- Path=/sh/**
# 当前断言是两个条件,第一是路径必须用/sh/开头
# 第二是访问的时间必须在下面指定的时间之后, 而且两个条件必须同时满足,才能路由
- Before=2022-09-27T10:31:30.898+08:00[Asia/Shanghai]
使用Between设置必须在指定时间之间访问
routes:
- id: gateway-shanghai
uri: lb://shanghai
predicates:
- Path=/sh/**
# 当前断言是两个条件,第一是路径必须用/sh/开头
# 第二是访问的时间必须在下面指定的时间之后, 而且两个条件必须同时满足,才能路由
- Between=2022-09-27T10:33:20.898+08:00[Asia/Shanghai],2022-09-27T10:33:40.898+08:00[Asia/Shanghai]
要求指定参数的请求
Query断言,判断是否包含指定的参数名称,包含参数名称才能通过路由
routes:
- id: gateway-shanghai
uri: lb://shanghai
predicates:
- Path=/sh/**
# 判断是否包含指定参数名称(username)的断言,不包含就不能正常路由
- Query=username