GatewayFilter 工厂
GatewayFilter Factories
路由过滤器允许以某种方式修改传入的HTTP请求或传出的HTTP响应。路由过滤器的作用域限定于特定路由。Spring Cloud Gateway包含许多内置的GatewayFilter工厂。
有关如何使用以下任何过滤器的更详细示例,请查看 单元测试。
章节总结
AddRequestHeader GatewayFilter Factory
AddRequestHeader GatewayFilter 工厂接收一个名称和值参数。以下示例配置了一个 AddRequestHeader GatewayFilter:
AddRequestHeadersIfNotPresent GatewayFilter Factory
AddRequestHeadersIfNotPresent 网关过滤器工厂接收一个由冒号分隔的名称和值对集合。以下示例配置了一个 AddRequestHeadersIfNotPresent 网关过滤器:
AddRequestParameter GatewayFilter Factory
AddRequestParameter 网关过滤器工厂接收一个名称和值参数。以下示例配置了一个 AddRequestParameter 网关过滤器:
AddResponseHeader GatewayFilter Factory
AddResponseHeader GatewayFilter Factory 接受三个参数:name、value 和 override(默认值为 true)。以下示例配置了一个 AddResponseHeader GatewayFilter:
CircuitBreaker GatewayFilter Factory
Spring Cloud CircuitBreaker GatewayFilter 工厂使用 Spring Cloud CircuitBreaker API 将 Gateway 路由包装在断路器内。Spring Cloud CircuitBreaker 支持多个可与 Spring Cloud Gateway 配合使用的库。Spring Cloud 默认支持 Resilience4J。
CacheRequestBody GatewayFilter Factory
某些情况下需要读取请求体。由于请求只能读取一次,我们需要缓存请求体。您可以使用 CacheRequestBody 过滤器在向下游发送请求之前缓存请求体,并从交换属性中获取请求体。
DedupeResponseHeader GatewayFilter Factory
DedupeResponseHeader GatewayFilter 工厂接收一个 name 参数和一个可选的 strategy 参数。name 可以包含一个以空格分隔的头部名称列表。以下示例配置了一个 DedupeResponseHeader GatewayFilter:
FallbackHeaders GatewayFilter Factory
FallbackHeaders 工厂允许您在转发到外部应用程序中 fallbackUri 的请求头中添加 Spring Cloud CircuitBreaker 执行异常详情,如下场景所示:
JsonToGrpc 网关过滤器工厂
JSONToGRPC 网关过滤器工厂将 JSON 负载转换为 gRPC 请求。
LocalResponseCache GatewayFilter Factory
此过滤器允许缓存响应体和标头,遵循以下规则:
MapRequestHeader GatewayFilter Factory
MapRequestHeader 网关过滤器工厂接收 fromHeader 和 toHeader 参数。它会创建一个新的命名头部(toHeader),其值从传入的 HTTP 请求中现有的命名头部(fromHeader)提取。如果输入头部不存在,该过滤器不会产生任何影响。如果新的命名头部已存在,其值将与新值合并。以下示例配置了一个 MapRequestHeader:
ModifyRequestBody GatewayFilter Factory
您可以使用 ModifyRequestBody 过滤器在请求体被网关发送到下游之前对其进行修改。
ModifyResponseBody GatewayFilter Factory
您可以使用 ModifyResponseBody 过滤器在响应体发送回客户端之前对其进行修改。
PrefixPath GatewayFilter Factory
PrefixPath GatewayFilter 工厂接收一个前缀参数。以下示例配置了 PrefixPath GatewayFilter:
PreserveHostHeader GatewayFilter Factory
PreserveHostHeader GatewayFilter 工厂没有参数。此过滤器设置一个请求属性,路由过滤器会检查该属性以确定是否应发送原始主机头,而不是由 HTTP 客户端确定的主机头。以下示例配置了一个 PreserveHostHeader GatewayFilter:
RedirectTo GatewayFilter Factory
RedirectTo GatewayFilter 工厂接收三个参数:status、url 以及可选的 includeRequestParams。status 参数应为 300 系列的重定向 HTTP 状态码,例如 301。url 参数应为一个有效的 URL,该值将作为 Location 头信息的值。includeRequestParams 参数指示是否应将请求查询参数包含在 url 中。如果未设置,该参数将被视为 false。对于相对重定向,应在路由定义的 uri 中使用 uri: no://op。以下清单配置了一个 RedirectTo GatewayFilter:
RemoveJsonAttributesResponseBody GatewayFilter Factory
RemoveJsonAttributesResponseBody GatewayFilter 工厂接收一个属性名集合进行搜索,可选参数列表中的最后一个参数可以是布尔值,用于指定仅删除根级别的属性(如果参数配置末尾未指定,则默认为 false)或递归删除(true)。它提供了一种便捷的方法,通过对 JSON 正文内容删除属性来应用转换。
RemoveRequestHeader GatewayFilter Factory
RemoveRequestHeader GatewayFilter 工厂接收一个 name 参数,该参数指定了需要移除的请求头名称。以下配置展示了如何配置 RemoveRequestHeader GatewayFilter:
RemoveRequestParameter GatewayFilter Factory
RemoveRequestParameter GatewayFilter 工厂接收一个 name 参数,该参数指定了需要移除的查询参数的名称。以下示例展示了如何配置 RemoveRequestParameter GatewayFilter:
RemoveResponseHeader GatewayFilter Factory
RemoveResponseHeader GatewayFilter 工厂接收一个 name 参数。该参数是要移除的响应头的名称。以下示例配置了一个 RemoveResponseHeader GatewayFilter:
RequestHeaderSize GatewayFilter Factory
RequestHeaderSize GatewayFilter 工厂接收 maxSize 和 errorHeaderName 参数。maxSize 参数是请求头(包括键和值)允许的最大数据大小。errorHeaderName 参数设置包含错误信息的响应头名称,默认值为 \"errorMessage\"。以下清单配置了一个 RequestHeaderSize GatewayFilter:
RequestRateLimiter GatewayFilter Factory
RequestRateLimiter 网关过滤器工厂使用 RateLimiter 实现来确定是否允许处理当前请求。如果不允许,则返回 HTTP 429 - 请求过多状态码(默认情况下)。
RewriteLocationResponseHeader GatewayFilter Factory
RewriteLocationResponseHeader GatewayFilter 工厂用于修改 Location 响应头的值,通常用于移除后端特定的细节。它接受 Mode、locationHeaderName、hostValue 和 protocols 参数。以下配置展示了如何配置 RewriteLocationResponseHeader GatewayFilter:
RewritePath GatewayFilter Factory
RewritePath GatewayFilter 工厂接收一个路径正则表达式参数和一个替换参数。它使用 Java 正则表达式来灵活地重写请求路径。以下配置展示了 RewritePath GatewayFilter 的用法:
RewriteRequestParameter GatewayFilter Factory
RewriteRequestParameter GatewayFilter 工厂接收一个名称参数和一个替换参数。它会重写指定名称的请求参数值。如果设置了多个具有相同名称的请求参数,它们将被替换为单个值。如果未找到请求参数,则不会进行任何更改。以下配置展示了 RewriteRequestParameter GatewayFilter:
RewriteResponseHeader GatewayFilter Factory
RewriteResponseHeader GatewayFilter 工厂接收 name、regexp 和 replacement 参数。它使用 Java 正则表达式来灵活地重写响应头值。以下示例配置了一个 RewriteResponseHeader GatewayFilter:
SaveSession GatewayFilter Factory
SaveSession GatewayFilter 工厂会在向下游转发调用前强制执行 WebSession::save 操作。这在将 Spring Session 与惰性数据存储等组件结合使用时特别有用,因为需要确保在发起转发调用前会话状态已保存。以下示例配置了一个 SaveSession GatewayFilter:
SecureHeaders GatewayFilter Factory
根据这篇博客文章的建议,SecureHeaders GatewayFilter 工厂会向响应中添加一系列头部信息。
SetPath GatewayFilter Factory
SetPath GatewayFilter 工厂接收一个路径模板参数。它提供了一种通过允许路径的模板化片段来操作请求路径的简单方法。这使用了 Spring Framework 中的 URI 模板。允许多个匹配片段。以下示例配置了一个 SetPath GatewayFilter:
SetRequestHeader GatewayFilter Factory
SetRequestHeader GatewayFilter 工厂接收 name 和 value 参数。以下清单配置了一个 SetRequestHeader GatewayFilter:
SetResponseHeader GatewayFilter Factory
SetResponseHeader GatewayFilter 工厂接收 name 和 value 参数。以下清单配置了一个 SetResponseHeader GatewayFilter:
SetStatus GatewayFilter Factory
SetStatus GatewayFilter 工厂接收一个参数 status。它必须是一个有效的 Spring HttpStatus。可以是整数值 404 或枚举的字符串表示形式:NOT\_FOUND。以下清单配置了一个 SetStatus GatewayFilter:
StripPrefix GatewayFilter Factory
StripPrefix GatewayFilter 工厂接收一个参数 parts。parts 参数表示在将请求发送到下游之前,要从请求路径中剥离的路径段数量。以下清单配置了一个 StripPrefix GatewayFilter:
重试网关过滤器工厂
Retry GatewayFilter 工厂支持以下参数:
RequestSize GatewayFilter Factory
当请求大小超过允许的限制时,RequestSize GatewayFilter 工厂可以阻止请求到达下游服务。该过滤器接受一个 maxSize 参数。maxSize 是 DataSize 类型,因此值可以定义为数字后跟可选的 DataUnit 后缀,例如 'KB' 或 'MB'。默认值为 'B',表示字节。这是以字节为单位定义的请求允许大小限制。以下清单配置了一个 RequestSize GatewayFilter:
SetRequestHostHeader GatewayFilter Factory
在某些情况下,可能需要覆盖主机头。此时,可以使用 SetRequestHostHeader 网关过滤器工厂将现有的主机头替换为指定值。该过滤器接收一个 host 参数。以下示例配置了一个 SetRequestHostHeader 网关过滤器:
TokenRelay GatewayFilter Factory
令牌中继是指 OAuth2 消费者充当客户端,并将传入的令牌转发给传出的资源请求。该消费者可以是纯客户端(如 SSO 应用程序)或资源服务器。
默认过滤器
要为所有路由添加过滤器,你可以使用 spring.cloud.gateway.default-filters。该属性接收一个过滤器列表。以下配置定义了一组默认过滤器: