路由过滤器允许以某种方式修改传入 HTTP 请求或传出 HTTP 响应。路由过滤器的作用域是特定的路由。Spring Cloud Gateway 包括许多内置的网关过滤器工厂。有关如何使用以下过滤器的更详细示例,请参阅unit tests 单元测试
AddRequestHeader
过滤器使用两个参数(name && value )
Example 13. application.yml
spring:
cloud:
gateway:
routes:
- id: add_request_header_route
uri: https://example.org
filters:
- AddRequestHeader=X-Request-red, blue
这个路由所有匹配请求的下游请求的头部中添加了 X-Request-red: blue。
AddRequestHeader
通常用户匹配请求路径或者host中的变量。下面的例子中会将诸如 https://xxx.org/red/snzz 中的 snzz
放入 X-Request-red
的value中。
Example 14. application.yml
spring:
cloud:
gateway:
routes:
- id: add_request_header_route
uri: https://example.org
predicates:
- Path=/red/{
segment}
filters:
- AddRequestHeader=X-Request-Red, Blue-{
segment}
AddRequestParameter
过滤器接受 name
和 value
参数
Example 15. application.yml
spring:
cloud:
gateway:
routes:
- id: add_request_parameter_route
uri: https://example.org
filters:
- AddRequestParameter=red, blue
上面的例子中为所有请求的下游请求的查询字符串red=blue
。
通常用于为指定请求路径或者域名的请求中添加请求参数,下面的例子中。会为myhost.org
域名下的所有请求加上一个参数,假如访问的是dev.myhost.org
,那么请求中就会加上一个foo=bar-dev
的参数。
spring:
cloud:
gateway:
routes:
- id: add_request_parameter_route
uri: https://example.org
predicates:
- Host: {
segment}.myhost.org
filters:
- AddRequestParameter=foo, bar-{
segment}
AddResponseHeader 采用 name
和 value
参数:
Example 17. application.yml
spring:
cloud:
gateway:
routes:
- id: add_response_header_route
uri: https://example.org
filters:
- AddResponseHeader=X-Response-Red, Blue
这将为所有匹配请求的下游响应头添加 X-Response-Red: Bar
头。
通常用于为指定请求路径或者域名的请求响应的消息头添加参数,下面的例子中。会为myhost.org
域名下的所有请求响应体的头部加上一个参数,假如访问的是dev.myhost.org
,那么响应头中就会加上一个foo=bar-dev
的参数。
spring:
cloud:
gateway:
routes:
- id: add_response_header_route
uri: https://example.org
predicates:
- Host: {
segment}.myhost.org
filters:
- AddResponseHeader=foo, bar-{
segment}
DedupeResponseHeader
接受一个name
参数和一个可选的strategy
参数。Name
可以包含以空格分隔的header
名称列表。
Example 19. application.yml
spring:
cloud:
gateway:
routes:
- id: dedupe_response_header_route
uri: https://example.org
filters:
- DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin
在网关 CORS 逻辑和下游逻辑都添加了Access-Control-Allow-Credentials
和Access-Control-Allow-Origin
响应头的情况下,这将删除重复的值。
DedupeResponseHeader
过滤器还接受一个可选的策略参数。接受的值是 RETAIN_FIRST
(默认值:保留第一个)、 RETAIN_FIRST
(保留最后一个)和 RETAIN_UNIQUE
(保留唯一的)。
Spring Cloud 断路器网关过滤器工厂使用 Spring Cloud 断路器 api 将网关路由包裹在断路器中。 支持多个可以与 Spring 云网关一起使用的库。 Spring Cloud 开箱即用地支持Resilience4J
。
要启用 Spring Cloud CircuitBreaker 过滤器,需要将 Spring-Cloud-starter-CircuitBreaker-reactor-resilience4j
放在类路径上。
Example 20. application.yml
spring:
cloud:
gateway:
routes:
- id: circuitbreaker_route
uri: https://example.org
filters:
- CircuitBreaker=myCircuitBreaker
可以参考下面的API文档来配置这个断路器。Resilience4J Documentation
你可以声明spring.cloud.gateway.default-filters
来为所有的路由添加过滤器,这个属性是一个list。
Example 51. application.yml
spring:
cloud:
gateway:
default-filters:
- AddResponseHeader=X-Response-Default-Red, Default-Blue
- PrefixPath=/httpbin
上面的配置会为httpbin
请求路径下的请求的ResponseHeader
中加入参数X-Response-Default-Red=Default-Blue
。