你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
如何将 VMware Spring Cloud 网关路由筛选器与 Azure Spring Apps Enterprise 计划配合使用
注意
Azure Spring Apps 是 Azure Spring Cloud 服务的新名称。 虽然该服务有新名称,但一些地方仍会使用旧名称,我们仍在更新屏幕截图、视频和图形等资产。
本文适用于:❌ 基本版/标准版 ✔️ 企业版
本文介绍如何将 VMware Spring Cloud Gateway 路由筛选器与 Azure Spring Apps Enterprise 计划配合使用,以将请求路由到应用程序。
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 Gateway 会在添加或更改任何路由配置后自动生成 OpenAPI 版本 3 文档。 有关详细信息,请参阅 适用于 VMware Tanzu 的 API 门户。
先决条件
- 已启用 Spring Cloud Gateway 的已预配 Azure Spring Apps Enterprise 计划服务实例。 有关详细信息,请参阅 快速入门:使用企业计划生成应用并将其部署到 Azure Spring Apps。
- Azure CLI 2.0.67 或更高版本。 使用以下命令安装 Azure Spring Apps 扩展:
az extension add --name spring
。
使用筛选器
使用 Spring Cloud Gateway 配置中的筛选器来处理传入请求或路由配置的传出响应。
例如,可以使用筛选器添加 HTTP 标头或基于授权令牌拒绝访问。
使用开放源代码筛选器
Spring Cloud Gateway 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
。
以下示例配置一个工厂,当网关 CORS 逻辑和下游逻辑添加两个 DeDupeResponseHeader
值时,该工厂将删除重复值 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
:proto 描述符文件。
可以使用和指定--descriptor_set_out
标志来生成此文件protoc
,如以下示例所示:
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
工厂,该 X-Request-Red:<values>
工厂使用传入 HTTP 请求标头的 Blue
更新值将标头添加到下游请求:
[
{
"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
工厂,该工厂使用标头发送状态302
Location:https://acme.org
以执行重定向:
[
{
"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
:要删除的标头的名称。
以下列表配置在 RemoveRequestHeader
向下游发送标头之前删除 X-Request-Foo
标头的工厂:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RemoveRequestHeader=X-Request-Foo"
]
}
]
RemoveRequestParameter
工厂 RemoveRequestParameter
在向下游发送参数之前删除该参数。
此工厂接受以下配置参数:
name
:要删除的查询参数的名称。
以下示例配置在 RemoveRequestParameter
向下游发送参数之前删除 red
参数的工厂:
[
{
"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
:此参数用于在提供时替换host:port
响应Location
标头的部分。 如果未提供,则使用请求标头的值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
Location
响应标头值object-service.prod.example.net/v2/some/object/id
,将重写为 api.example.com/some/object/id
< a0/>。
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
< a0/> 表示。methods
:应重试的 HTTP 方法,使用org.springframework.http.HttpMethod
。series
:要重试的状态代码系列,使用org.springframework.http.HttpStatus.Series
。exceptions
:应重试的引发异常的列表。backoff
:为重试配置的指数退避。 重试在回退间隔firstBackoff * (factor ^ n)
后执行,其中n
迭代。 如果maxBackoff
已配置,则应用的最大退避限制为maxBackoff
。 如果basedOnPreviousValue
为 true,backoff
则使用prevBackoff * factor
..
启用后,将为筛选器配置 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
响应状态设置为 413 Payload Too Large
另一个标头 errorMessage
。
以下示例演示了一个 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
X-Forwarded-Client-Cert
:根据 Kubernetes 识别客户端证书 CA 的能力的值。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"
]
}
]
后续步骤
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈