9.2 核心配置
Spring Cloud 网关路由匹配是 Spring WebFlux HandlerMapping 处理的一部分。Spring Cloud 网关包含许多内置的路由断言工厂,这些内置断言可以匹配 HTTP 请求的不同属性,同时多个断言可以组合在一起使用。本节主要讲解 Spring Cloud Gateway 中的一些常用配置。
9.2.1 Route Predicate 配置
1. After Route Predicate Factory 配置
After Route Predicate Factory 接收一个时间参数,当在指定时间之后进行请求时,匹配 After Route Predicate 断言。下面是 After Route Predicate 断言配置示例,代码如下:
spring:
cloud:
gateway:
routes:
-id: after_route
uri: https://example.org
predicates:
-After=2017-01-20T17:42:47.789-07:00[America/Denver]2. Before Route Predicate Factory 配置
Before Route Predicate Factory 接收一个时间参数,当在指定时间之前进行请求时,匹配 Before Route Predicate 断言。下面是 Before Route Predicate 断言配置示例代码:
spring:
cloud:
gateway:
routes:
-id: before_route
uri: https://example.org
predicates:
-Before=2017-01-20T17:42:47.789-07:00[America/Denver]3. Between Route Predicate Factory 配置
Between Route Predicate Factory 接收两个时间参数。当请求时间在两个时间参数之间时,匹配 Between Route Predicate 断言。代码如下:
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]4. Cookie Route Predicate Factory 配置
Cookie Route Predicate Factory 接收两个参数,一个是 cookie 名称,另一个是正则表达式。当请求中的 cookie 名称和值匹配断言设置的 cookie 名称和正则表达式时通过。下面的这个例子中,断言要求的 cookie 名称是 chocolate,cookie 的值匹配 ch.p 正则表达式。
spring:
cloud:
gateway:
routes:
-id: cookie_route
uri: https://example.org
predicates:
-Cookie=chocolate, ch.p5. Header Route Predicate Factory 配置
Header Route Predicate Factory 接收两个参数,一个是 header 名称,另一个是正则表达式。当请求中的 cookie 名称和值匹配断言设置的 header 名称和正则表达式时通过。下面的这个例子中,断言要求的 header 名称是 X-Request-Id,header 属性值匹配\d+正则表达式。
spring:
cloud:
gateway:
routes:
-id: header_route
uri: https://example.org
predicates:
-Header=X-Request-Id, \d+6. Host Route Predicate Factory 配置
Host Route Predicate Factory 接收一个参数,参数值包含一系列域名。下面的示例代码可以匹配 www.somehost.org、beta.somehost.org 或 www.anotherhost.org 域名。
spring:
cloud:
gateway:
routes:
-id: host_route
uri: https://example.org
predicates:
-Host=**.somehost.org,**.anotherhost.org7. Method Route Predicate Factory 配置
Method Route Predicate Factory 接收一个 HTTP 方法参数,可以有一个或多个值。匹配 GET 和 POST 方法的请求,示例代码如下:
spring:
cloud:
gateway:
routes:
-id: method_route
uri: https://example.org
predicates:
-Method=GET,POST8. Path Route Predicate Factory 配置
Path Route Predicate Factory 匹配请求路径的表达式。匹配/red/1、/red/blue 和/blue/green 请求的示例代码如下:
spring:
cloud:
gateway:
routes:
-id: path_route
uri: https://example.org
predicates:
-Path=/red/{segment},/blue/{segment}9. Query Route Predicate Factory 配置
Query Route Predicate Factory 接收两个参数,一个是必传参数,另一个是可选表达式。在下面的例子中,要求请求需要匹配 red 参数及 gree.表达式参数。
spring:
cloud:
gateway:
routes:
-id: query_route
uri: https://example.org
predicates:
-Query=red, gree.10. RemoteAddr Route Predicate Factory 配置
Remoteaddr Route Predicate Factory 接收一系列 IPv4/IPv6 地址。匹配 192.168.1.10 地址请求的示例代码如下:
spring:
cloud:
gateway:
routes:
-id: remoteaddr_route
uri: https://example.org
predicates:
-RemoteAddr=192.168.1.1/2411. Weight Route Predicate Factory 配置
Weight Route Predicate Factory 接收两个参数,即 group 和 weight。下面的例子表示 80%的请求被路由到 weighthigh.org 域名,20%的请求被路由调用到 weighlow.org 域名。
spring:
cloud:
gateway:
routes:
-id: weight_high
uri: https://weighthigh.org
predicates:
-Weight=group1, 8
-id: weight_low
uri: https://weightlow.org
predicates:
-Weight=group1, 29.2.2 GatewayFilter 配置
路由过滤器允许修改 HTTP 请求和 HTTP 响应数据。Spring Cloud 网关内置了很多过滤器。本节主要介绍这些内置的过滤器与匹配方式。
1. AddRequestHeader GatewayFilter Factory 配置
AddRequestHeader GatewayFilter Factory 接收两个参数:name 和 value。为请求添加 X-Request-red:blue header 属性的示例代码如下:
spring:
cloud:
gateway:
routes:
-id: add_request_header_route
uri: https://example.org
filters:
-AddRequestHeader=X-Request-red, blue.2. AddRequestParameter GatewayFilter Factory 配置
AddRequestParameter GatewayFilter Factory 可以为 HTTP 请求增加请求参数。为请求添加 red=blue 参数的示例代码如下:
spring:
cloud:
gateway:
routes:
-id: add_request_parameter_route
uri: https://example.org
filters:
-AddRequestParameter=red, blue.3. AddResponseHeader GatewayFilter Factory 配置
AddResponseHeader GatewayFilter Factory 为 HTTP 响应头添加属性。为请求响应头添加 X-Response-Foo:Bar 属性的示例代码如下:
spring:
cloud:
gateway:
routes:
-id: add_response_header_route
uri: https://example.org
filters:
-AddResponseHeader=X-Response-Foo, Bar4. MapRequestHeader GatewayFilter Factory 配置
MapRequestHeader GatewayFilter Factory 会将 fromHeader 中的值添加到 toHeader 中。将 Blue 的属性值添加到 X-Request-Red 头属性中,示例代码如下:
spring:
cloud:
gateway:
routes:
-id: map_request_header_route
uri: https://example.org
filters:
-MapRequestHeader=Blue, X-Request-Red5. PrefixPath GatewayFilter Factory 配置
PrefixPath GatewayFilter Factory 为请求路径添加前缀。为请求的路径添加/mypath 路径,例如请求/hello,则被修改为/mypath/hello,示例代码如下:
spring:
cloud:
gateway:
routes:
-id: prefixpath_route
uri: https://example.org
filters:
-PrefixPath=/mypath6. RedirectTo GatewayFilter Factory 配置
RedirectTo GatewayFilter Factory 是重定向配置。例如,返回状态码 302,并且重定向到 https://acme.org,代码如下:
spring:
cloud:
gateway:
routes:
-id: prefixpath_route
uri: https://example.org
filters:
-RedirectTo=302, https://acme.org7. RemoveRequestHeader GatewayFilter Factory 配置
RemoveRequestHeader GatewayFilter Factory 用于删除请求中的特定 header。例如,删除 X-Request-Foo 属性,代码如下:
spring:
cloud:
gateway:
routes:
-id: removerequestheader_route
uri: https://example.org
filters:
-RemoveRequestHeader=X-Request-Foo8. RemoveResponseHeader GatewayFilter Factory 配置
RemoveResponseHeader GatewayFilter Factory 用于删除响应头属性。例如,删除响应头中的 X-Response-Foo 属性,代码如下:
spring:
cloud:
gateway:
routes:
-id: removeresponseheader_route
uri: https://example.org
filters:
-RemoveResponseHeader=X-Response-Foo9. RemoveRequestParameter GatewayFilter Factory 配置
RemoveRequestParameter GatewayFilter Factory 用于删除特定的请求参数。例如,删除请求参数 red,代码如下:
spring:
cloud:
gateway:
routes:
-id: removerequestparameter_route
uri: https://example.org
filters:
-RemoveRequestParameter=red10. Retry GatewayFilter Factory 配置
Retry GatewayFilter Factory 提供请求重试配置。例如,一个简单的重试配置方式的代码如下:
spring:
cloud:
gateway:
routes:
-id: retry_test
uri: http://localhost:8080/flakey
predicates:
-Host=*.retry.com
filters:
-name: Retry
args:
retries: 3
statuses: BAD_GATEWAY
methods: GET,POST
backoff:
firstBackoff: 10ms
maxBackoff: 50ms
factor: 2
basedOnPreviousValue: false11. FallbackHeaders GatewayFilter Factory 配置
FallbackHeaders GatewayFilter Factory 可以提供熔断降级功能。Fallback 配置方式的示例代码如下:
spring:
cloud:
gateway:
routes:
-id: retry_test
uri: http://localhost:8080/flakey
predicates:
-Host=*.retry.com
filters:
-name: Retry
args:
retries: 3
statuses: BAD_GATEWAY
methods: GET,POST
backoff:
firstBackoff: 10ms
maxBackoff: 50ms
factor: 2
basedOnPreviousValue: false12. RequestRateLimiter GatewayFilter Factory 配置
RequestRateLimiter GatewayFilter Factory 提供请求重试配置。一个简单的重试配置方式的示例代码如下:
spring:
cloud:
gateway:
routes:
-id: retry_test
uri: http://localhost:8080/flakey
predicates:
-Host=*.retry.com
filters:
-name: Retry
args:
retries: 3
statuses: BAD_GATEWAY
methods: GET,POST
backoff:
firstBackoff: 10ms
maxBackoff: 50ms
factor: 2
basedOnPreviousValue: false9.2.3 全局配置
Spring Cloud 网关除了核心配置外,还提供了其他的全局配置信息,如超时配置和 CORS 配置。
超时配置方式的示例代码如下:
spring:
cloud:
gateway:
httpclient:
connect-timeout: 1000
response-timeout: 5sCORS 配置方式的示例代码如下:
spring:
cloud:
gateway:
globalcors:
cors-configurations:
'[/**]':
allowedOrigins: "https://docs.spring.io"
allowedMethods:
-GET绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论