你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
如何将 VMware Spring Cloud 网关路由筛选器与 Azure Spring Apps 企业计划配合使用
注意
从 2025 年 3 月中旬开始,基本、标准和企业计划将弃用,停用期为三年。 建议过渡到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告。
从 2024 年 9 月 30 日开始,标准消耗和专用计划将弃用,六个月后将完全关闭。 建议过渡到 Azure 容器应用。 有关详细信息,请参阅将 Azure Spring Apps 标准消耗和专用计划迁移到 Azure 容器应用。
本文适用于:❌ 基本版/标准版 ✔️ 企业版
本文介绍如何将 VMware Spring Cloud 网关路由筛选器与 Azure Spring Apps 企业计划配合使用,将请求路由到应用程序。
VMware Spring Cloud 网关是一个基于开源 Spring Cloud 网关项目的商业 VMware Tanzu 组件。 Spring Cloud 网关处理 API 开发团队的横切关注点,例如单一登录 (SSO)、访问控制、速率限制、复原能力、安全性等。 你可以使用新式云本机模式以及你为 API 开发选择的任何编程语言来加速 API 交付。
VMware Spring Cloud 网关包括以下功能:
- 动态路由配置,独立于无需重新编译即可应用和更改的单个应用程序。
- 用于将授权的 JSON Web 令牌 (JWT) 声明传输到应用程序服务的商业 API 路由筛选器。
- 客户端证书授权。
- 速率限制方法。
- 断路器配置。
- 支持通过 HTTP 基本身份验证凭据访问应用程序服务。
为了与适用于 VMware Tanzu 的 API 门户集成,VMware Spring Cloud 网关会在任何路由配置增添或变更后自动生成 OpenAPI 版本 3 文档。 有关详细信息,请参阅使用适用于 VMware Tanzu 的 API 门户。
先决条件
- 已启用 Spring Cloud 网关的已预配 Azure Spring Apps 企业计划服务实例。 有关详细信息,请参阅快速入门:使用企业计划生成应用并将其部署到 Azure Spring Apps。
- Azure CLI 2.0.67 或更高版本。 使用以下命令安装 Azure Spring Apps 扩展:
az extension add --name spring
。
使用筛选器
使用 Spring Cloud Gateway 配置中的筛选器来处理传入请求或对路由配置的传出响应。
例如,可以使用筛选器添加 HTTP 标头或基于授权令牌拒绝访问。
使用开放源代码筛选器
Spring Cloud 网关 OSS 包括几个用于为路由创建筛选器的 GatewayFilter
中心。 以下部分会介绍这些中心。
AddRequestHeader
AddRequestHeader
中心将标头添加到下游请求的所有匹配请求的标头。
此中心接受以下配置参数:
name
value
以下示例配置了一个 AddRequestHeader
中心,该中心将标头 X-Request-red:blue
添加到下游请求的所有匹配请求的标头:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AddRequestHeader=X-Request-red, blue"
]
}
]
AddRequestHeader
中心有权访问用于匹配路径或主机的 URI 变量。 可以在值中使用 URI 变量,并在运行时扩展变量。
以下示例配置了使用变量的 AddRequestHeader
中心:
[
{
"predicates": [
"Path=/api/{segment}"
],
"filters": [
"AddRequestHeader=X-Request-red, blue-{segment}"
]
}
]
AddRequestHeadersIfNotPresent
AddRequestHeadersIfNotPresent
中心会在原始请求中不存在标头时添加标头。
此中心接受以下配置参数:
headers
:键值对(标头名称、标头值)的逗号分隔列表。
以下示例配置了 AddRequestHeadersIfNotPresent
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AddRequestHeadersIfNotPresent=Content-Type:application/json,Connection:keep-alive"
]
}
]
AddRequestParameter
AddRequestParameter
中心将参数添加到下游请求的所有匹配请求的查询字符串中。
此中心接受以下配置参数:
name
value
以下示例配置了一个 AddRequestParameter
中心,该中心将 red=blue
参数添加到下游请求的所有匹配请求的查询字符串中:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AddRequestParameter=red, blue"
]
}
]
AddRequestParameter
中心有权访问用于匹配路径或主机的 URI 变量。 可以在值中使用 URI 变量,并在运行时扩展变量。
以下示例配置了使用变量的 AddRequestParameter
中心:
[
{
"predicates": [
"Path=/api/{segment}"
],
"filters": [
"AddRequestParameter=foo, bar-{segment}"
]
}
]
AddResponseHeader
AddResponseHeader
中心将标头添加到下游响应的所有匹配请求的标头中。
此中心接受以下配置参数:
name
value
以下示例配置了一个 AddResponseHeader
中心,该中心将 X-Response-Red:Blue
标头添加到下游响应的所有匹配请求的标头:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AddResponseHeader=X-Response-Red, Blue"
]
}
]
AddResponseHeader
中心有权访问用于匹配路径或主机的 URI 变量。 可以在值中使用 URI 变量,并在运行时扩展变量。
以下示例配置了使用变量的 AddResponseHeader
中心:
[
{
"predicates": [
"Path=/api/{segment}"
],
"filters": [
"AddResponseHeader=foo, bar-{segment}"
]
}
]
CircuitBreaker
CircuitBreaker
中心将路由包装在断路器中。
此中心接受以下配置参数:
name
:断路器名称。fallbackUri
:重新路由 URI,可以是本地路由或外部处理程序。status codes
(可选):使用数字或文本格式的要匹配的状态代码冒号分隔列表。failure rate
(可选):开启断路器的阈值。 默认值为 50%。duration
(可选):再次关闭前等待的时间。 默认值为 60 秒。
以下示例配置了 CircuitBreaker
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"CircuitBreaker=myCircuitBreaker,forward:/inCaseOfFailureUseThis,401:NOT_FOUND:500,10,30s"
]
}
]
DeDupeResponseHeader
DeDupeResponseHeader
中心会移除响应头的重复值。
此中心接受以下配置参数:
name
:标头名称的空格分隔列表。strategy
(可选):接受的值为RETAIN_FIRST
、RETAIN_LAST
、RETAIN_UNIQUE
。 默认值为RETAIN_FIRST
。
以下示例配置了一个 DeDupeResponseHeader
中心,当网关 CORS 逻辑和下游逻辑添加 Access-Control-Allow-Credentials
和 Access-Control-Allow-Origin
响应标头的重复值时,该中心会移除它们:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"DeDupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin"
]
}
]
FallbackHeaders
FallbackHeaders
中心会将任何断路器异常添加到标头。 此筛选器要求在另一个路由中使用 CircuitBreaker
筛选器。
此中心没有任何参数。
以下示例使用异常类型、消息和(如果可用)根本原因异常类型和说明 FallbackHeaders
筛选器添加到请求的消息来配置 FallbackHeaders
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"CircuitBreaker=myCircuitBreaker,forward:/inCaseOfFailureUseThis,401:NOT_FOUND:500,10,30s"
]
},
{
"predicates": [
"Path=/inCaseOfFailureUseThis"
],
"filters": [
"FallbackHeaders"
]
}
]
可以通过设置以下参数的值(提到它们时使用的是默认值)来覆盖配置中标头的名称:
executionExceptionTypeHeaderName
("Execution-Exception-Type")executionExceptionMessageHeaderName
("Execution-Exception-Message")rootCauseExceptionTypeHeaderName
("Root-Cause-Exception-Type")rootCauseExceptionMessageHeaderName
("Root-Cause-Exception-Message")
JSONToGRPC
JSONToGRPCFilter
中心将 JSON 有效负载转换为 gRPC 请求。
此中心接受以下配置参数:
protoDescriptor
:原型描述符文件。
可以使用 protoc
和指定 --descriptor_set_out
标志来生成此文件,如以下示例所示:
protoc --proto_path=src/main/resources/proto/ \
--descriptor_set_out=src/main/resources/proto/hello.pb \
src/main/resources/proto/hello.proto
注意
不支持 streaming
参数。
以下示例使用来自 protoc
的输出配置了 JSONToGRPCFilter
中心:
[
{
"predicates": [
"Path=/json/**"
],
"filters": [
"JsonToGrpc=file:proto/hello.pb,file:proto/hello.proto,HelloService,hello"
]
}
]
LocalResponseCache
激活全局缓存时,LocalResponseCache
中心会覆盖特定路由的本地响应缓存配置。
此中心接受以下配置参数:
size
:缓存逐出开始前此路由允许的最大缓存条目大小(以 KB、MB 和 GB 为单位)。timeToLive
:过期前缓存条目允许的生存期。 使用持续时间后缀:s
为秒、m
为分钟、h
为小时。
以下示例配置了 LocalResponseCache
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"LocalResponseCache=3m,1MB"
]
}
]
MapRequestHeader
MapRequestHeader
中心会向下游请求添加一个标头,其中包含传入 HTTP 请求标头中更新后的值。
此中心接受以下配置参数:
fromHeader
toHeader
此中心会创建一个新的命名标头 (toHeader
),该值会从传入的 HTTP 请求中现有的命名标头 (fromHeader
) 内提取出来。 如果输入标头不存在,则筛选器不起作用。 如果新的命名标头已存在,则其值将用新值扩充。
以下示例配置了一个 MapRequestHeader
中心,该中心使用传入 HTTP 请求的 Blue
标头的更新值将 X-Request-Red:<values>
标头添加到下游请求:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"MapRequestHeader=Blue, X-Request-Red"
]
}
]
PrefixPath
PrefixPath
中心将前缀添加到所有请求的路径。
此中心接受以下配置参数:
prefix
以下示例配置了一个 PrefixPath
中心,该中心将前缀 /api
添加到所有请求的路径,以便将对 /catalog
的请求发送到 /api/catalog
:
[
{
"predicates": [
"Path=/catalog/**"
],
"filters": [
"PrefixPath=/api"
]
}
]
PreserveHostHeader
PreserveHostHeader
中心设置路由筛选器检查的请求特性,以确定是发送原始主机头还是由 HTTP 客户端确定的主机头。
此中心没有任何参数。
以下示例配置了 PreserveHostHeader
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"PreserveHostHeader"
]
}
]
RedirectTo
RedirectTo
中心将重定向添加到原始 URL。
此中心接受以下配置参数:
status
:300 系列重定向 HTTP 代码,例如301
。url
:Location
标头的值。 必须是有效的 URI。 对于相对重定向,应将uri: no://op
用作路由定义的 URI。
以下示例配置了一个 RedirectTo
中心,该中心会发送带有 Location:https://acme.org
标头的状态 302
以执行重定向:
[
{
"uri": "https://example.org",
"filters": [
"RedirectTo=302, https://acme.org"
]
}
]
RemoveJsonAttributesResponseBody
RemoveJsonAttributesResponseBody
中心会从 JSON 响应正文中移除 JSON 特性及其值。
此中心接受以下配置参数:
attribute names
:要从 JSON 响应中移除的特性名称的逗号分隔列表。delete recursively
(可选,布尔值):仅在根级别 (false
) 或以递归方式 (true
) 移除特性的配置。 默认值为false
。
以下示例配置了 RemoveJsonAttributesResponseBody
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RemoveJsonAttributesResponseBody=origin,foo,true"
]
}
]
RemoveRequestHeader
RemoveRequestHeader
中心会从下游请求中移除标头。
此中心接受以下配置参数:
name
:要移除的标头的名称。
以下列表配置了会在 X-Request-Foo
标头发送到下游之前移除它的 RemoveRequestHeader
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RemoveRequestHeader=X-Request-Foo"
]
}
]
RemoveRequestParameter
RemoveRequestParameter
中心会在参数发送到下游之前移除它。
此中心接受以下配置参数:
name
:要移除的查询参数的名称。
以下示例配置了在 red
参数发送到下游之前将其移除的 RemoveRequestParameter
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RemoveRequestParameter=red"
]
}
]
RemoveResponseHeader
RemoveResponseHeader
中心会在标头返回到网关客户端之前从响应中移除它。
此中心接受以下配置参数:
name
:要移除的标头的名称。
以下列表配置了一个 RemoveResponseHeader
中心,该中心会在 X-Response-Foo
标头返回到网关客户端之前从响应中移除它:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RemoveResponseHeader=X-Response-Foo"
]
}
]
RequestHeaderSize
RequestHeaderSize
中心确定请求头的大小。
此中心接受以下配置参数:
maxSize
:请求头允许的最大数据大小,包括键和值。errorHeaderName
:包含错误消息的响应头的名称。 默认情况下,响应头的名称为errorMessage
。
以下列表配置了一个 RequestHeaderSize
中心,如果任何请求头的大小大于 1000 字节,则该中心会发送状态 431
:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RequestHeaderSize=1000B"
]
}
]
RewriteLocationResponseHeader
RewriteLocationResponseHeader
中心会修改 Location
响应头的值,目的通常是去除特定于后端的详细信息。
此中心接受以下配置参数:
stripVersionMode
:此参数具有以下可能的值:NEVER_STRIP
、AS_IN_REQUEST
、ALWAYS_STRIP
。 默认值为AS_IN_REQUEST
。NEVER_STRIP
:即使原始请求路径不包含任何版本,版本也不会剥离。AS_IN_REQUEST
:仅当原始请求路径不包含任何版本时,才会剥离版本。ALWAYS_STRIP
:即使原始请求路径包含版本,版本也始终会被剥离。
hostValue
:此参数用于在提供了响应Location
标头的host:port
部分时替换它。 如果它未被提供,则会使用Host
请求头的值。protocolsRegex
:协议名称与其匹配的有效正则表达式String
。 如果不匹配,则筛选器不起作用。 默认值为http|https|ftp|ftps
。locationHeaderName
以下列表配置了 RewriteLocationResponseHeader
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RewriteLocationResponseHeader=AS_IN_REQUEST, Location, ,"
]
}
]
在此示例中,对于 POST
api.example.com/some/object/name
的请求值,object-service.prod.example.net/v2/some/object/id
的 Location
响应头值将重写为 api.example.com/some/object/id
。
RewritePath
RewritePath
中心使用 Java 正则表达式来灵活重写请求路径。
此中心接受以下配置参数:
regexp
replacement
以下列表配置了 RewritePath
中心:
[
{
"predicates": [
"Path=/red/**"
],
"filters": [
"RewritePath=/red/?(?<segment>.*), /$\\{segment}"
]
}
]
在此示例中,对于 /red/blue
的请求路径,此配置在发出下游请求之前将路径设置为 /blue
。
RewriteResponseHeader
RewriteResponseHeader
中心使用 Java 正则表达式来灵活重写响应头值。
此中心接受以下配置参数:
name
regexp
replacement
以下示例配置了 RewriteResponseHeader
中心:
[
{
"predicates": [
"Path=/red/**"
],
"filters": [
"RewriteResponseHeader=X-Response-Red, , password=[^&]+, password=***"
]
}
]
在此示例中,对于 /42?user=ford&password=omg!what&flag=true
的标头值,在发出下游请求后,该配置将设置为 /42?user=ford&password=***&flag=true
。
SetPath
SetPath
中心提供了一种简单的方法来操作请求路径,方法是允许路径的模板化段。 此筛选器使用 Spring Framework 中的 URI 模板,并允许多个匹配的段。
此中心接受以下配置参数:
template
以下示例配置了 SetPath
中心:
[
{
"predicates": [
"Path=/red/{segment}"
],
"filters": [
"SetPath=/{segment}"
]
}
]
在此示例中,对于 /red/blue
的请求路径,此配置在发出下游请求之前将路径设置为 /blue
。
SetRequestHeader
SetRequestHeader
中心会用给定的名称替换所有标头(而不是添加)。
此中心接受以下配置参数:
name
value
以下列表配置了 SetRequestHeader
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"SetRequestHeader=X-Request-Red, Blue"
]
}
]
在此示例中,下游服务器响应了 X-Request-Red:1234
,并被替换为 X-Request-Red:Blue
。
SetRequestHeader
中心有权访问用于匹配路径或主机的 URI 变量。 可以在值中使用 URI 变量,并在运行时扩展变量。
以下示例配置了使用变量的 SetRequestHeader
中心:
[
{
"predicates": [
"Path=/api/{segment}"
],
"filters": [
"SetRequestHeader=foo, bar-{segment}"
]
}
]
SetResponseHeader
SetResponseHeader
中心会用给定的名称替换所有标头(而不是添加)。
此中心接受以下配置参数:
name
value
以下列表配置了 SetResponseHeader
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"SetResponseHeader=X-Response-Red, Blue"
]
}
]
在此示例中,下游服务器响应了 X-Response-Red:1234
,并被替换为 X-Response-Red:Blue
。
SetResponseHeader
中心有权访问用于匹配路径或主机的 URI 变量。 可以在值中使用 URI 变量,并在运行时扩展变量。
以下示例配置了使用变量的 SetResponseHeader
中心:
[
{
"predicates": [
"Path=/api/{segment}"
],
"filters": [
"SetResponseHeader=foo, bar-{segment}"
]
}
]
SetStatus
SetStatus
中心会配置服务器请求的响应状态。
此中心接受以下配置参数:
status
:有效的 SpringHttpStatus
值,它可以是整数值,例如404
,也可以是枚举的字符串表示形式,例如NOT_FOUND
。
以下列表配置了 SetStatus
中心:
[
{
"predicates": [
"Path=/experimental/**"
],
"filters": [
"SetStatus=UNAUTHORIZED"
]
},
{
"predicates": [
"Path=/unknown/**"
],
"filters": [
"SetStatus=401"
]
}
]
StripPrefix
StripPrefix
中心会先从请求中移除前缀,然后再将其发送到下游。
此中心接受以下配置参数:
parts
:在发送到下游之前,要从请求中剥离的路径中的部件数。 默认值是 1秒。
以下示例配置了 StripPrefix
中心:
[
{
"predicates": [
"Path=/name/**"
],
"filters": [
"StripPrefix=2"
]
}
]
在此示例中,通过网关向 /name/blue/red
发出了请求。 向 nameservice
发出的请求显示为 nameservice/red
。
重试
Retry
中心会确定尝试的重试次数。
此中心接受以下配置参数:
retries
:应尝试的重试次数。statuses
:应重试的 HTTP 状态代码,用org.springframework.http.HttpStatus
表示。methods
:应重试的 HTTP 方法,用org.springframework.http.HttpMethod
表示。series
:要重试的状态代码系列,用org.springframework.http.HttpStatus.Series
表示。exceptions
:应重试的引发的异常的列表。backoff
:为重试配置的指数退避。 重试在退避间隔firstBackoff * (factor ^ n)
后执行,其中n
为迭代。 如果maxBackoff
已配置,则应用的退避上限为maxBackoff
。 如果basedOnPreviousValue
为 true,则使用prevBackoff * factor
计算backoff
。
启用后,将为 Retry
筛选器配置以下默认值:
retries
:三次。series
:5XX 系列。methods
:GET 方法。exceptions
:IOException
和TimeoutException
。backoff
:已禁用。
以下示例配置了 Retry
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"Retry=3,INTERNAL_SERVER_ERROR,GET,10ms,50ms,2,false"
]
}
]
RequestSize
当请求大小大于允许的限制时,RequestSize
中心可以限制请求到达下游服务。
此中心接受以下配置参数:
maxSize
:一种DataSize
类型,其中值定义为后跟可选的DataUnit
后缀(例如KB
或MB
)的数字。 默认后缀值为B
(字节)。 它是以字节为单位定义的请求的允许大小限制。
以下示例配置了 RequestSize
中心:
[
{
"predicates": [
"Path=/upload"
],
"filters": [
"RequestSize=5000000"
]
}
]
在此示例中,当请求因大小而被拒绝时,RequestSize
中心会使用另一个标头 errorMessage
将响应状态设置为 413 Payload Too Large
。
以下示例显示了一个 errorMessage
:
errorMessage : Request size is larger than permissible limit. Request size is 6.0 MB where permissible limit is 5.0 MB
TokenRelay
TokenRelay
中心会将 OAuth2
访问令牌转发到下游资源。 此筛选器配置为路由定义中的 boolean
值,而不是显式筛选器。
以下示例配置了 TokenRelay
中心:
[
{
"predicates": [
"Path=/api/**"
],
"tokenRelay": true
}
]
使用商业筛选器
适用于 Kubernetes 的 Spring Cloud Gateway 还提供了许多自定义 GatewayFilter
中心。 以下部分会介绍这些中心。
AllowedRequestCookieCount
AllowedRequestCookieCount
中心会根据 Cookie 数确定是否允许匹配请求继续。
此中心接受以下配置参数:
amount
:允许的 Cookie 数。
以下示例配置了 AllowedRequestCookieCount
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AllowedRequestCookieCount=2"
]
}
]
AllowedRequestHeadersCount
AllowedRequestHeadersCount
中心会根据标头数确定是否允许匹配请求继续。
此中心接受以下配置参数:
amount
:允许的标头数。
以下示例配置了 AllowedRequestHeadersCount
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AllowedRequestHeadersCount=4"
]
}
]
AllowedRequestQueryParamsCount
AllowedRequestQueryParamsCount
中心会根据查询参数的数量确定是否允许匹配请求继续。
此中心接受以下配置参数:
amount
:允许的参数数量。
以下示例配置了 AllowedRequestQueryParamsCount
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AllowedRequestQueryParamsCount=3"
]
}
]
BasicAuth
BasicAuth
中心会向请求添加 BasicAuth
Authorization
标头。
此中心没有任何参数。
以下示例配置了 BasicAuth
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"BasicAuth"
]
}
]
ClaimHeader
ClaimHeader
中心会将数据从 JWT 声明复制到 HTTP 标头中。
此中心接受以下配置参数:
Claim name
:要传递的声明的区分大小写的名称。Header name
:HTTP 标头的名称。
以下示例配置了 ClaimHeader
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"ClaimHeader=sub,X-Claim-Sub"
]
}
]
ClientCertificateHeader
ClientCertificateHeader
中心会验证 X-Forwarded-Client-Cert
标头证书。
此中心接受以下配置参数:
domain pattern
:根据 Kubernetes 识别客户端证书 CA 的能力的X-Forwarded-Client-Cert
值。certificate fingerprint
(可选):TLS/SSL 证书指纹。
以下示例配置了 ClientCertificateHeader
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"ClientCertificateHeader=*.example.com,sha-1:aa:bb:00:99"
]
}
]
Cors
Cors
中心会在路由上激活 CORS 验证。
此中心接受以下整理为 CORS 选项的键值对的配置参数:
allowedOrigins
allowedMethods
allowedHeaders
maxAge
allowCredentials
allowedOriginPatterns
以下示例配置了 Cors
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"Cors=[allowedOrigins:https://origin-1,allowedMethods:GET;POST;DELETE,allowedHeaders:*,maxAge:400,allowCredentials:true,allowedOriginPatterns:https://*.test.com:8080]"
]
}
]
JsonToXml
JsonToXml
中心会将 JSON 响应正文转换为 XML 响应正文。
此中心接受以下配置参数:
wrapper
:XML 响应的根标记名称(如果需要另一个根标记才能生成有效的 XML)。 默认值为response
。
以下示例配置了 JsonToXml
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"JsonToXml=custom-response"
]
}
]
RateLimit
RateLimit
中心会根据请求量确定是否允许匹配请求继续。
此中心接受以下配置参数:
request limit
:在窗口期间接受的请求数上限。window duration
:窗口持续时间(以毫秒为单位)。 或者,可以使用s
、m
或h
后缀来指定持续时间(以秒、分钟或小时为单位)。partition source
(可选):分区键的位置(claim
、header
或IPs
)。partition key
(可选):用于对请求计数器进行分区的值。
以下示例配置了 RateLimit
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RateLimit=1,10s"
]
}
]
以下示例显示了其他 RateLimit
配置:
RateLimit=1,10s
RateLimit=1,10s,{claim:client_id}
RateLimit=1,10s,{header:client_id}
RateLimit=2,10s,{IPs:2;127.0.0.1;192.168.0.1}
RestrictRequestHeaders
RestrictRequestHeaders
中心会根据标头确定是否允许匹配请求继续。
如果有任何 HTTP 标头不在不区分大小写的 headerList
配置中,则 431 Forbidden error
的响应会返回到客户端。
此中心接受以下配置参数:
headerList
:不区分大小写的允许标头的名称列表。
以下示例配置了 RestrictRequestHeaders
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RestrictRequestHeaders=Content-Type,x-request-temp"
]
}
]
RewriteAllResponseHeaders
RewriteAllResponseHeaders
中心会一次重写多个响应头。
此中心接受以下配置参数:
pattern to match
:要与标头值匹配的正则表达式。replacement
:替换值。
以下示例配置了 RewriteAllResponseHeaders
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RewriteAllResponseHeaders=\\d,0"
]
}
]
RewriteResponseBody
RewriteResponseBody
中心会修改响应的正文。
此中心接受以下配置参数,这些参数会被整理为键值对的逗号分隔列表,其中每个对都接受此形式 pattern to match:replacement
:
pattern to match
:要与响应正文中的文本匹配的正则表达式。replacement
:替换值。
以下示例配置了 RewriteResponseBody
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RewriteResponseBody=foo:bar,/path-one/:/path-two/"
]
}
]
RewriteJsonAttributesResponseBody
RewriteJsonAttributesResponseBody
中心会使用 JSONPath
表示法重写 JSON 特性。
此中心接受以下配置参数,这些参数会被整理为键值对的逗号分隔列表,其中每个对都接受此形式 jsonpath:replacement
:
jsonpath
:与响应正文匹配的JSONPath
表达式。replacement
:替换值。
以下示例配置了 RewriteJsonAttributesResponseBody
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RewriteJsonAttributesResponseBody=slides[1].title:Welcome,date:11-11-2022"
]
}
]
角色
Roles
中心会授权包含其中一个已配置的角色的请求。
此中心接受以下配置参数:
roles
:已授权的角色的逗号分隔列表。
以下示例配置了 Roles
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"Roles=role_01,role_02"
]
}
]
作用域
Scopes
中心会授权包含其中一个已配置的 OAuth
范围的请求。
此中心接受以下配置参数:
scopes
:已授权的OAuth
范围的逗号分隔列表。
以下示例配置了 Scopes
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"Scopes=api.read,api.write,user"
]
}
]
StoreIpAddress
StoreIPAddress
中心仅用于扩展开发,并且用于应用程序的上下文。
此中心接受以下配置参数:
attribute name
:用于将 IP 存储为交换特性的名称。
以下示例配置了 StoreIPAddress
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"StoreIpAddress=ip"
]
}
]
SSO 登录
如果没有有效的授权令牌,SSO login
中心会重定向以进行身份验证。 此中心配置为路由定义中的 boolean
值,而不是显式筛选器。
以下示例配置了 SSO login
中心:
[
{
"predicates": [
"Path=/api/**"
],
"ssoEnabled": true
}
]
StoreHeader
StoreHeader
中心会将标头值存储在应用程序的上下文中。 此筛选器仅用于扩展开发。
此中心接受以下配置参数:
headers
:要检查的标头列表。 使用找到的第一个项。attribute name
:用于将标头值存储为交换特性的名称。
以下示例配置了 StoreHeader
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"StoreHeader=x-tracing-header,custom-id,x-custom-id,tracingParam"
]
}
]
XmlToJson
XmlToJson
中心会将 XML 响应正文转换为 JSON 响应正文。
此中心没有任何参数。
以下示例配置了 XmlToJson
中心:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"XmlToJson"
]
}
]