Spring Cloud Gateway 斷言
Spring Cloud Gateway提供了很多斷言設置,當http請求進入Spring Cloud Gateway時,網關中的路由斷言工廠會根基配置的路由規則,對http請求進行斷言匹配,匹配成功的請求進行路由轉發,失敗的直接返回是錯誤信息。
以下是常用的斷言工廠
After
設定一個UTC時間,此時間之后的請求會成功,此時間之前的請求會404
UTC 時間生成:
//比當前時間早一小時的時間
String minTime = ZonedDateTime.now().minusHours(1).format(DateTimeFormatter.ISO_ZONED_DATE_TIME);
System.out.println(minTime);
java配置
@Bean
public RouteLocator customRoteLocator(RouteLocatorBuilder builder) {
//生成一個比當前時間早一個小時的UTC時間
ZonedDateTime minusTime = LocalDateTime.now().minusHours(1).atZone(ZoneId.systemDefault());
return builder.routes()
.route("after_route", predicateSpec -> predicateSpec.after(minusTime)
.uri("http://baidu.com"))
.build();
}
yml配置
spring:
cloud:
gateway:
routes:
- id: after_route
uri: https://example.org
predicates:
- After=2017-01-20T17:42:47.789-07:00[America/Denver]
Before
設定一個時間,此時間之前的請求會成功,此時間之后的請求會404
spring:
cloud:
gateway:
routes:
- id: before_route
uri: https://example.org
predicates:
- Before=2017-01-20T17:42:47.789-07:00[America/Denver]
Between
設定一個時間區間,此時間區間內的請求會成功
spring:
cloud:
gateway:
routes:
- id: between_route
uri: https://example.org
predicates:
- Between=2017-01-20T17:42:47.789-07:00[America/Denver], 2017-01-21T17:42:47.789-07:00[America/Denver]
Cookie
設置兩個參數:cookie的key和value,當請求中攜帶一條此信息時,請求成功;
spring:
cloud:
gateway:
routes:
- id: after_route
uri: https://example.org
predicates:
- Cookie=mycookie,mycookievalue
配置多個值:
pring:
cloud:
gateway:
routes:
- id: after_route
uri: https://example.org
predicates:
- name: Cookie
args:
name: mycookie
regexp: mycookievalue
Header
設置兩個參數:header的key和value,當請求攜帶匹配信息時,請求成功
spring:
cloud:
gateway:
routes:
- id: header_route
uri: https://example.org
predicates:
- Header=key,value
Host
設定一個主機名,當請求信息來自此主機時,請求成功;
spring:
cloud:
gateway:
routes:
- id: host_route
uri: https://example.org
predicates:
- Host=**.somehost.org,**.anotherhost.org
Method
指定請求的方法:如POST,GET
spring:
cloud:
gateway:
routes:
- id: method_route
uri: https://example.org
predicates:
- Method=GET,POST
Path
指定路徑下的請求,進行轉發
spring:
cloud:
gateway:
routes:
- id: path_route
uri: https://example.org
predicates:
- Path=/red/{segment},/blue/{segment}
Query
指定一個請求參數的key,符合條件的進行轉發
如:http://localhost:8080/hello?key=value 中的key
spring:
cloud:
gateway:
routes:
- id: query_route
uri: https://example.org
predicates:
- Query=key
spring:
cloud:
gateway:
routes:
- id: query_route
uri: https://example.org
predicates:
- Query=red, gree.
RemoteAddr
指定ip或ip段,符合條件的轉發成功
spring:
cloud:
gateway:
routes:
- id: remoteaddr_route
uri: https://example.org
predicates:
- RemoteAddr=192.168.1.1/24