SpingCloudGateWay断言工厂
配置文件中的predicates属性值 Predicate Factory会被Predicate Factory读取并处理,转变为路由判断的条件
总共有11个Predicate Factory类型
Path=.....
该规则会被org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory
类处理
称** | 说明 | 示例 |
---|---|---|
After | 只接收某个时间点之后的请求 | - After=2037-01-20T17:42:47.789-07:00[America/Denver] |
Before | 只接收某个时间点之前的请求 | - Before=2031-04-13T15:14:47.433+08:00[Asia/Shanghai] |
Between | 只接收某两个时间点之前的请求 | - Between=2037-01-20T17:42:47.789-07:00[America/Denver], 2037-01-21T17:42:47.789-07:00[America/Denver] |
Cookie | 只接收包含某些cookie的请求 | - Cookie=chocolate, ch.p |
Header | 只接收包含某些header的请求 | - Header=X-Request-Id, \d+ |
Host | 只接收访问某个host(域名)的请求 | - Host=.somehost.org,.anotherhost.org |
Method | 只接收指定请求方式请求 | - Method=GET,POST |
Path | 只接收请求路径符合指定规则的请求 | - Path=/red/{segment},/blue/** |
Query | 只接收请求参数必须包含指定参数的请求 | - Query=name, Jack或者- Query=name |
RemoteAddr | 请求者的ip必须是指定范围的请求 | - RemoteAddr=192.168.1.1/24 |
Weight | 权重处理 | - Weight=group1, 2 |
The After Route Predicate Factory 指定日期时间之后
spring:
cloud:
gateway:
routes:
- id: login-server
uri: lb://login-server
predicates:
- Path=/api/loginServer/**
- After=2023-07-14T15:47:26.761+08:00[Asia/Shanghai]
#时间是ZonedDateTime类型的时间值
The Before Route Predicate Factory 指定日期时间之前
spring:
cloud:
gateway:
routes:
- id: login-server
uri: lb://login-server
predicates:
- Path=/api/loginServer/**
- Before=2023-07-14T15:47:26.761+08:00[Asia/Shanghai]
#时间是ZonedDateTime类型的时间值
晚于2023-07-14T15:47:26.761+08:00[Asia/Shanghai]
时间发送请求无法访问(图中时间因为时区需要+8小时)
The Between Route Predicate Factory 两个时间之间
spring:
cloud:
gateway:
routes:
- id: login-server
uri: lb://login-server
predicates:
- Path=/api/loginServer/**
- Between=2023-07-14T15:47:26.761+08:00[Asia/Shanghai], 2023-07-14T16:10:26.761+08:00[Asia/Shanghai]
- Between=2023-07-14T15:47:26.761+08:00[Asia/Shanghai], 2023-07-14T16:10:26.761+08:00[Asia/Shanghai]
可以访问
- Between=2023-07-14T15:47:26.761+08:00[Asia/Shanghai], 2023-07-14T15:59:26.761+08:00[Asia/Shanghai]
无法访问
The Cookie Route Predicate Factory 包含某些cookie
spring:
cloud:
gateway:
routes:
- id: login-server
uri: lb://login-server
predicates:
- Path=/api/loginServer/**
- Cookie=name, hry
当请求中name=hry
可以访问 否则无法访问
The Header Route Predicate Factory 包含某些header
spring:
cloud:
gateway:
routes:
- id: login-server
uri: lb://login-server
predicates:
- Path=/api/loginServer/**
- Header=token, hry
当请求的请求头中有token=hry
可以访问 否则无法访问
The Host Route Predicate Factory 指定域名
spring:
cloud:
gateway:
routes:
- id: login-server
uri: lb://login-server
predicates:
- Path=/api/loginServer/**
- Host=localhost:20000, www.testhost.com:20000
测试:先给回环地址加几个本地dns域名解析
在没有添加域名路由规则时,这两个域名都能够正常访问
添加如上域名规则后,指定的域名才能正常访问,正常访问
The Method Route Predicate Factory 指定请求方式
spring:
cloud:
gateway:
routes:
- id: login-server
uri: lb://login-server
predicates:
- Path=/api/loginServer/**
- Method=GET
指定请求方式的请求才被接收
The Path Route Predicate Factory 指定
spring:
cloud:
gateway:
routes:
- id: login-server
uri: lb://login-server
predicates:
- Path=/api/loginServer/**
匹配路径规则的被接收
The Query Route Predicate Factory 指定请求参数名、参数值(值可以用正则表达式)
spring:
cloud:
gateway:
routes:
- id: login-server
uri: lb://login-server
predicates:
- Query=green, ge[1-9] #第一个green指的时请求参数名,第二个时请求参数值
请求必须带指定参数,如果路由规则指定了值的格式,也必须符合指定的值格式。
示例为 请求需要带green参数,值为ge+[1-9]中的一个值 例 ge1 ge2 …
The RemoteAddr Route Predicate Factory 指定请求源地址
spring:
cloud:
gateway:
routes:
- id: login-server
uri: lb://login-server
predicates:
- RemoteAddr=192.168.43.248/29 #网络地址和子网掩码
请求源地址在指定网段内,正常接收
示例请求源地址是192.168.43.248-192.168.43.256符合路由规则
The Weight Route Predicate Factory 根据权重
spring:
cloud:
gateway:
routes:
- id: weight_high
uri: http://localhost:9090
predicates:
- Weight=group1, 8
- id: weight_low
uri: http://localhost:9091
predicates:
- Weight=group1, 2
根据权重路由,可以达到负载均衡的效果