SpringCloudGateway2.1.0中⽂官⽹⽂档
Spring Cloud Gateway 2.1.0 中⽂官⽹⽂档
⽬录
1. How to Include Spring Cloud Gateway
2. Glossary
3. How It Works
4. Route Predicate Factories
5. GatewayFilter Factories
6. Global Filters
7. TLS / SSL
8. Configuration
9. Reactor Netty Access Logs
10. CORS Configuration
11. Actuator API
12. Developer Guide
该项⽬提供了⼀个建⽴在Spring Ecosystem之上的API⽹关,包括:Spring 5,Spring Boot 2和Project Reactor。Spring Cloud Gateway旨在提供⼀种简单⽽有效的⽅式来对API进⾏路由,并为他们提供切⾯,例如:安全性,监控/指标 和弹性等。
1. 如何在⼯程中引⽤Spring Cloud Gateway
要在项⽬中引⼊Spring Cloud Gateway,需要引⽤ group org.springframework.cloud 和 artifact id为spring-cloud-starter-gateway starter。最新的Spring Cloud Release 构建信息,请参阅。
如果应⽤了该starter,但由于某种原因不希望启⽤⽹关,请进⾏设置spring.abled=false。
重要 Spring Cloud Gateway依赖Spring Boot和Spring Webflux提供的Netty runtime。它不能在传统的Servlet容器中⼯作或构建为WAR
2. 词汇表
Route 路由:gateway的基本构建模块。它由ID、⽬标URI、断⾔集合和过滤器集合组成。如果聚合断⾔结果为真,则匹配到该路由。
Predicate 断⾔:这是⼀个。输⼊类型是。这允许开发⼈员可以匹配来⾃HTTP请求的任何内容,例如Header或参数。
Filter 过滤器:这些是使⽤特定⼯⼚构建的实例。所以可以在返回请求之前或之后修改请求和响应的内容。
3. 如何⼯作的
Spring Cloud Gateway Diagram
客户端向Spring Cloud Gateway发出请求。如果Gateway Handler Mapping确定请求与路由匹配,则将其发送到Gateway Web Handler。此handler通过特定于该请求的过滤器链处理请求。图中filters被虚线划分的原因是filters可以在发送代理请求之前或之后执⾏逻辑。先执⾏所有“pre filter”逻辑,然后进⾏请求代理。在请求代理执⾏完后,执⾏“post filter”逻辑。
注意 HTTP和HTTPS URI默认端⼝设置是80和443。
4. 路由断⾔Factories
Spring Cloud Gateway将路由作为Spring WebFlux HandlerMapping基础结构的⼀部分进⾏匹配。Spring Cloud Gateway包含许多内置的路由断⾔Factories。这些断⾔都匹配HTTP请求的不同属性。多个路由断⾔Factories可以通过 and 组合使⽤。
4.1 After 路由断⾔ Factory
After Route Predicate Factory采⽤⼀个参数——⽇期时间。在该⽇期时间之后发⽣的请求都将被匹配。
spring:
cloud:
gateway:
routes:
-
id: after_route
uri:
predicates:
- After=2017-01-20T17:42:47.789-07:00[America/Denver]
4.2 Before 路由断⾔ Factory
Before Route Predicate Factory采⽤⼀个参数——⽇期时间。在该⽇期时间之前发⽣的请求都将被匹配。
- id: before_route
uri:
predicates:
- Before=2017-01-20T17:42:47.789-07:00[America/Denver]
4.3 Between 路由断⾔ Factory
Between 路由断⾔ Factory有两个参数,datetime1和datetime2。在datetime1和datetime2之间的请求将被匹配。datetime2参数的实际时间必须在datetime1之后。
spring:
cloud:
gateway:
routes:
- id: between_route
uri:
predicates:
-
Between=2017-01-20T17:42:47.789-07:00[America/Denver], 2017-01-21T17:42:47.789-07:00[America/Denver]
4.4 Cookie 路由断⾔ Factory
Cookie 路由断⾔ Factory有两个参数,cookie名称和正则表达式。请求包含次cookie名称且正则表达式为真的将会被匹配。
spring:
cloud:
gateway:
routes:
- id: cookie_route
uri:
predicates:
- Cookie=chocolate, ch.p
4.5 Header 路由断⾔ Factory
Header 路由断⾔ Factory有两个参数,header名称和正则表达式。请求包含次header名称且正则表达式为真的将会被匹配。
spring:
cloud:
gateway:
routes:
- id: header_route
uri:
predicates:
- Header=X-Request-Id, \d+
4.6 Host 路由断⾔ Factory
Host 路由断⾔ Factory包括⼀个参数:host name列表。使⽤Ant路径匹配规则,.作为分隔符。 l.
- id: host_route
uri:
predicates:
- Host=**.,**.
4.7 Method 路由断⾔ Factory
Method 路由断⾔ Factory只包含⼀个参数: 需要匹配的HTTP请求⽅式
spring:
cloud:
gateway:
routes:
- id: method_route
uri:
predicates:
- Method=GET
所有GET请求都将被路由
4.8 Path 路由断⾔ Factory
Path 路由断⾔ Factory 有2个参数: ⼀个Spring PathMatcher表达式列表和可选matchOptionalTrailingSeparator标识 . l.
spring:
cloud:
gateway:
routes:
- id: host_route
uri:
predicates:
- Path=/foo/{segment},/bar/{segment}
例如: /foo/1 or /foo/bar or /bar/baz的请求都将被匹配
URI 模板变量 (如上例中的 segment ) 将以Map的⽅式保存于Attributes() key
为ServerWebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE. 这些值将在使⽤
可以使⽤以下⽅法来更⽅便地访问这些变量。
Map<String, String> uriVariables = PathPredicateVariables(exchange);
String segment = ("segment");
4.9 Query 路由断⾔ Factory
Query 路由断⾔ Factory 有2个参数: 必选项 param 和可选项 regexp.
- id: query_route
uri:
predicates:
- Query=baz
则包含了请求参数 baz的都将被匹配。route add命令实例
spring:
cloud:
gateway:
routes:
- id: query_route
uri:
predicates:
- Query=foo, ba.
如果请求参数⾥包含foo参数,并且值匹配为ba. 表达式,则将会被路由,如:bar and baz
4.10 RemoteAddr 路由断⾔ Factory
RemoteAddr 路由断⾔ Factory的参数为 ⼀个CIDR符号(IPv4或IPv6)字符串的列表,最⼩值为1,例如192.168.0.1/16(其中192.168.0.1是IP地址并且16是⼦⽹掩码)。
spring:
cloud:
gateway:
routes:
- id: remoteaddr_route
uri:
predicates:
- RemoteAddr=192.168.1.1/24
如果请求的remote address 为 192.168.1.10则将被路由
4.10.1 修改远程地址的解析⽅式
默认情况下,RemoteAddr 路由断⾔ Factory使⽤传⼊请求中的remote address。如果Spring Cloud Gateway位于代理层后⾯,则可能与实际客户端IP地址不匹配。
可以通过设置⾃定义RemoteAddressResolver来⾃定义解析远程地址的⽅式。Spring Cloud Gateway⽹关附带⼀个⾮默认远程地址解析程序,它基于, XForwardedRemoteAddressResolver.
XForwardedRemoteAddressResolver 有两个静态构造函数⽅法,采⽤不同的安全⽅法:
1. XForwardedRemoteAddressResolver::TrustAll返回⼀个RemoteAddressResolver,它始终采⽤X-Forwarded-for头中到的第⼀个IP
地址。这种⽅法容易受到欺骗,因为恶意客户端可能会为解析程序接受的“x-forwarded-for”设置初始值。
2. XForwardedRemoteAddressResolver::MaxTrustedIndex获取⼀个索引,该索引与在Spring Cloud⽹关前运⾏的受信任基础设施数
量相关。例如,如果SpringCloudGateway只能通过haproxy访问,则应使⽤值1。如果在访问Spring Cloud Gateway之前需要两个受信任的基础架构跃点,那么应该使⽤2。
给定以下的header值:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。