32.Gateway内置路由断言
2020-06-01 本文已影响0人
LANSHENGYANG
断言
- Predicate(断言)用于进行条件判断,只有断言都返回真,才会真正的执行路由。
- 断言就是说:在什么条件下才能进行路由转发
内置路由断言工厂
- SpringCloud Gateway包括许多内置的断言工厂,所有这些断言都与HTTP请求的不同属性匹配。具体如下:
- 基于Datetime类型的断言工厂
- 此类型的断言根据时间做判断,主要有三个:
- AfterRoutePredicateFactory:接收一个日期参数,判断请求日期是否晚于指定日期
- BeforeRoutePredicateFactory:接收一个日期参数,判断请求日期是否早于指定日期
- BetweenRoutePredicateFactory:接收两个日期参数,判断请求日期是否在指定时间段内
-After=2019-12-31T23:59:59.789+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=** .testhost.org
- 基于Method请求方法的断言工厂
- MethodRoutePredicateFactory:接收一个参数,判断请求类型是否跟指定的类型匹配。
-Method=GET
- 基于Path请求路径的断言工厂
- PathRoutePredicateFactory:接收一个参数,判断请求的URI部分是否满足路径规则。
-Path=/foo/{segment}
- 基于Query请求参数的断言工厂
- QueryRoutePredicateFactory:接收两个参数,请求param和正则表达式,判断请求参数是否具体有给定名称且值与正则表达式匹配。
-Query=baz,ba
内置断言工厂的使用
- 接下来我们验证几个内置断言的使用:
server:
port: 7000
spring:
application:
name: api-gateway
cloud:
gateway:
routes: # 路由数组[]
- id: product_route # 当前路由的标识,要求唯一,默认是UUID
uri: http://localhost:8081 # 请求最终要转发的地址
order: 1 # 路由的优先级,数字越小代表路由的优先级越高
predicates: #断言(条件判断,返回值是Boolean,转发请求要求满足的条件)
- Path=/product-serv/** # 当请求路径满足path指定的规则时,此路由信息才会正常转发
- Before=2020-4-26T00:00:00.000+08:00 #限制请求时间在2019-11-28之前
- Method=GET #限制请求方式为POST
filters: # 过滤器(在请求传递过程中 对请求做一些手脚)
- StripPrefix=1 # 在请求转发之前去掉一层路径