Spring Cloud Gateway-过滤器
本节将为大家详细介绍Spring Could Gateway 内置过滤器相关内容。
Spring Cloud Gateway 过滤器为大家提供了修改特定路由中的http请求和响应的能力,默认提供了31种过滤器,基本满足大家的各种场景需求.
基本配置
过滤器的配置分为两种方式,一种是通过配置文件的方式(此方式有简化配置模式及详细配置模式两种,同断言,不再详述),一种是通过编码的方式。
配置文件(摘自官方文档):
spring:
cloud:
gateway:
routes:
- id: resource
uri: http://localhost:9000
predicates:
- Path=/resource
filters:
- TokenRelay=
编码方式(摘自官方文档):
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("resource", r -> r.path("/resource")
.filters(f -> f.tokenRelay())
.uri("http://localhost:9000"))
.build();
}
配置全局过滤器:
spring:
cloud:
gateway:
default-filters:
- AddResponseHeader=X-Response-Default-Red, Default-Blue
- PrefixPath=/httpbin
内置31种过滤器
在这里为大家一一介绍:
序号 | 过滤器 | 作用 | 参数名 | 参数值 | 示例(filters配置) | 备注 |
---|---|---|---|---|---|---|
1 | AddRequestHeader | 添加请求头 | name,value | 添加的请求头及其值 | AddRequestHeader=X-Request-red, blue | |
2 | AddRequestParameter | 在Query String中添加请求参数,参数值可以是变量,具体值可以从PATH或Host中匹配 | name,value | 添加的参数名及其值 | AddRequestParameter=foo, bar-{segment} | |
3 | AddResponseHeader | 添加响应头 | name,value | 添加的响应头及其值 | AddResponseHeader=X-Response-Red, Blue | |
4 | DedupeResponseHeader | 过滤重复响应头 | name,strategy | 需要过滤的响应头及策略(保留第一个,保留最后一个,保留唯一值) | DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin | |
5 | CircuitBreaker | 熔断器 | name,fallbackUri,statusCodes | 熔断器名称、熔断后的默认URI、熔断触发状态 | - CircuitBreaker=myCircuitBreaker | 使用熔断器需配置spring-cloud-starter-circuitbreaker-reactor-resilience4j ,详见Resilience4J Documentation |
6 | FallbackHeaders | 指定发生熔断时fallback响应头 | executionExceptionTypeHeaderName, executionExceptionMessageHeaderName, rootCauseExceptionTypeHeaderName, rootCauseExceptionMessageHeaderName | 异常类型、详情、根因类型、根因详情等响应头名称 | executionExceptionTypeHeaderName: Test-Header | |
7 | MapRequestHeader | 添加新的请求头,值从已有请求头中获取 | fromHeader,toHeader | 已有请求头名称,新请求头名称 | MapRequestHeader=Blue, X-Request-Red | |
8 | PrefixPath | 请求路径增加前缀 | prefix | 需增加的前缀 | PrefixPath=/mypath | |
9 | PreserveHostHeader | 配置是否将原始请求头发送到服务方 | - | - | PreserveHostHeader | |
10 | RequestRateLimiter | 请求频度控制 | - | - | 默认提供了基于Redis的频度控制过滤器,也可以自定义 | |
11 | RedirectTo | 重定向过滤器 | status,url | 重定向http status及重定向后的url | RedirectTo=302, https://acme.org | |
12 | RemoveRequestHeader | 删除请求头 | name | 待删除的请求头 | RemoveRequestHeader=X-Request-Foo | |
13 | RemoveResponseHeader | 删除响应头 | name | 待删除的响应头 | RemoveResponseHeader=X-Response-Foo | |
14 | RemoveRequestParameter | 删除请求参数 | name | 待删除的请求参数名 | RemoveRequestParameter=red | |
15 | RewritePath | 重写PATH | regexp,replacement | 重写部分匹配规则,需替换的值 | RewritePath=/red/?(?<segment>.*), /$\{segment} | 匹配规则采用正则表达式,替换值支持从匹配中获取 |
16 | RewriteLocationResponseHeader | 重写响应头中的Location | stripVersionMode, locationHeaderName, hostValue, protocolsRegex | path中version处理模式,location响应头名称,host值,url协议头 | RewriteLocationResponseHeader=AS_IN_REQUEST, Location, , | |
17 | RewriteResponseHeader | 重写响应头 | name,regexp,replacement | 响应头名称,需修改值的匹配规则,需替换的值 | RewriteResponseHeader=X-Response-Red, , password=[^&]+, password=*** | |
18 | SaveSession | 强制触发WebSession::save | - | - | SaveSession | |
19 | SecureHeaders | 添加一组安全相关的头信息到响应中 | - | - | SecureHeaders | |
20 | SetPath | 设置请求path | template | path模板 | SetPath=/{segment} | |
21 | SetRequestHeader | 设置请求头(不添加新的) | name,value | 请求头及其值 | SetRequestHeader=X-Request-Red, Blue | |
22 | SetResponseHeader | 设置响应头(不添加新的) | name,value | 响应头及其值 | SetResponseHeader=X-Response-Red, Blue | |
23 | SetStatus | 设置响应状态 | status | 响应状态 | SetStatus=401 | |
24 | StripPrefix | 截断请求PATH | parts | 需截断的长度(’/'个数) | StripPrefix=2 | |
25 | Retry | 重试过滤器 | - | - | - | 详细配置 |
26 | RequestSize | 限流器 | maxSize | 请求最大报文大小 | maxSize: 5000000 | |
27 | SetRequestHostHeader | 设置请求host | host | 分组及权重 | SetRequestHostHeader=example.org | |
28 | ModifyRequestBody | 修改请求报文 | - | - | - | 只能通过 Java DSL 配置 |
29 | ModifyResponseBody | 修改响应报文 | - | - | - | 只能通过 Java DSL 配置 |
30 | TokenRelay | 配合OAuth2使用 | - | - | TokenRelay= | |
31 | CacheRequestBody | 根据权重进行路由 | bodyClass | 请求体类型 | - | 详细配置 |