Java Spring Cloud VII 之 内置断言
断言
内置断言
断言就是判断一个条件,如果条件满足就执行某个操作
predicates就是断言的意思
我们前面章节使用的Path就是内置断言中的一种,指访问的路径是否满足条件
除了路径断言之外,还有很多内置断言常见的内置断言列表
- after
- before
- between
- cookie
- header
- host
- method
- path
- query
- remoteaddr
时间相关
after,before,between
在指定时间之后,之前或之间
判断是否满足时间条件,如果满足才允许访问
我们先使用下面代码获得当前包含时区的系统时间表
ZonedDateTime.now()
使用After设置必须在指定时间之后访问
- id: gateway-shanghai
uri: lb://shanghai
predicates:
- Path=/sh/**
- After=2022-06-24T15:30:30.999+08:00[Asia/Shanghai]
使用Before设置必须在指定时间之后访问
- id: gateway-shanghai
uri: lb://shanghai
predicates:
- Path=/sh/**
- Before=2022-06-24T15:34:00.999+08:00[Asia/Shanghai]
使用Between设置必须在指定时间之间访问
- id: gateway-shanghai
uri: lb://shanghai
predicates:
- Path=/sh/**
- Between=2022-06-24T15:34:00.999+08:00[Asia/Shanghai],2022-06-24T15:36:20.999+08:00[Asia/Shanghai]
要求指定参数
Query断言,要求必须包含指定的参数才能访问资源
- id: gateway-shanghai
uri: lb://shanghai
predicates:
- Path=/sh/**
- Query=name
内置过滤器
Gateway还提供的内置过滤器
不要和我们学习的filter混淆
内置过滤器允许我们在路由请求到目标资源的同时,对这个请求进行一些加工或处理
下面我们使用AddRequestParameter过滤器,想请求中添加参数
- id: gateway-shanghai
uri: lb://shanghai
predicates:
- Path=/sh/**
- Query=name
filters:
- AddRequestParameter=age,80
shanghai项目的控制器接收这个参数
@GetMapping("/show")
public String show(String name,Integer age){
return "这里是上海!"+name+","+age;
}
重启网关和shanghai项目
例如输入如下路径
http://localhost:9000/sh/show?name=tom
因为过滤器的存在,控制可以获取网关过滤器添加的参数值
其他内置过滤器和自定义过滤器的使用,同学们可以查阅相关文档自己了解