文章目录
- 前言
- 1. 内置断言工厂的介绍
- 2. 内置断言工厂的使用(示例)
- 2.1 BeforeRoutePredicateFactory工厂
- 2.2 MethodRoutePredicateFactory工厂
前言
Predicate 断言,用于进行条件判断,只有断言都为真,才会真正的执行路由。
1. 内置断言工厂的介绍
SpringCloud Gateway包括许多内置的断言工厂,所有这些断言都与HTTTP请求的不同属性匹配。
具体如下:
- 基于Datetime类型的断言工厂
此类的断言根据时间来做判断,主要有三个
AfterRoutePredicateFactory: 接收一个日期参数,判断请求日期是否晚于指定日期
BeforeRoutePredicateFactory: 接收一个日期参数,判断请求日期是否早于指定日期
BetweenRoutePredicateFactory: 接收两个日期参数,判断请求日期是否在指定时间段内
After=2021-12-12T23:59:59.123+08:00[Asia/Shanghai]
- 基于远程地址的断言工厂
RemoteAddrRoutePredicateFactory: 接收一个IP地址段,判断请求主机地址是否在地址段中
RemoteAddr=192.168.1.1/24
- 基于Cookie的断言工厂
CookieRoutePredicateFactory: 接收两个参数cookie名字和一个正则表达式。判断请求cookie是否具有给定名称且值与正则表达式匹配。
Cookie=chocolate,ch.
- 基于Header的断言工厂
HeaderRoutePredicateFactory: 接收两个参数,标题名称和正则表达式。判断请求Header是否具有给定名称且值与正则表达式匹配。
Header=X-Request-Id,\d+
- 基于Host的断言工厂
HostRoutePredicateFactory: 接收一个参数,主机名模式。判断请求的Host是否满足匹配条件。
Host=**.baidu.com
- 基于Method请求方法的断言工厂
MethodRoutePredicateFactory: 接收一个参数,判断请求类型是否跟指定的类型匹配。
Method=GET
- 基于Path请求路径的断言工厂
PathRoutePredicateFactory: 接收一个参数,判断请求的URI部分是否满足路径规则。
Path=/product-serv/{segment}
- 基于Query请求参数的断言工厂
QueryRoutePredicateFactory: 接收一个参数,请求param和正则表达式,判断请求参数是否具有给定名称值与正则表达式是否匹配。
Query=baz,ba.
- 基于路由权重的断言工厂
WeightRoutePredicateFactory: 接收一个[组名,权重],然后对于同一个组内的路由按照权重转发。
routes: #路由数组,满足什么条件,转发到什么微服务
- id: product_route #当前路由发的标识,需要唯一,默认是UUID
# uri: http://localhost:8081 #请求最终转发的地址
uri: lb://server-product #lb 指的是负载均衡,后面跟的是具体微服务的名称
order: 1 #路由优先级 数值越小优先级越高
predicates: #断言
- Path=/product-serv/** #当请求路径满足Path指定的规则时,此路由信息才会正常转发
- Weight=group3,1
filters: #过滤器,在请求传递过程中,对请求做一些手脚
- StripPrefix=1 #在请求转发之前去掉一层路径,例如 localhost:7000/product-serv/product/1-->localhost:8081/product/1
- id: product_route2 #当前路由发的标识,需要唯一,默认是UUID
# uri: http://localhost:8081 #请求最终转发的地址
uri: lb://server-product #lb 指的是负载均衡,后面跟的是具体微服务的名称
order: 1 #路由优先级 数值越小优先级越高
predicates: #断言
- Path=/product-serv/** #当请求路径满足Path指定的规则时,此路由信息才会正常转发
- Weight=group3,9
filters: #过滤器,在请求传递过程中,对请求做一些手脚
- StripPrefix=1 #在请求转发之前去掉一层路径,例如 localhost:7000/product-serv/product/1-->localhost:8081/product/1
2. 内置断言工厂的使用(示例)
2.1 BeforeRoutePredicateFactory工厂
重启gateway网关,发起请求。
把时间修改后,重启gateway,再次请求,断言为真,可以访问到接口。
2.2 MethodRoutePredicateFactory工厂
在添加断言前,先测试POST是否可以请求,确认发起POST可以请求接口。
此时,设置Method=GET
发起POST请求,请求失败。而发起GET请求,则没问题。