RewriteResponseHeader GatewayFilter 工厂
RewriteResponseHeader GatewayFilter 工厂接受 name(名称)、regexp(正则表达式)和 replacement(替换值)参数。 它使用 Java 正则表达式提供了一种灵活的方式来重写响应头的值。
以下示例配置了一个 RewriteResponseHeader GatewayFilter:
示例 1. application.yml
yaml
spring:
cloud:
gateway:
routes:
- id: rewriteresponseheader_route
uri: https://example.org
filters:
- RewriteResponseHeader=X-Response-Red, , password=[^&]+, password=***作用: 对于响应头值为 /42?user=ford&password=omg!what&flag=true 的情况,在发出下游请求后,它会被设置为 /42?user=ford&password=***&flag=true。
注意: 由于 YAML 规范的限制,你必须使用 $\ 来表示 $。
补充教学 —— 为什么要重写响应头?
场景 1:隐藏敏感信息(安全合规)
- 后端现状:某些遗留服务会在响应头的
Location字段中包含敏感参数,例如重定向 URL 里的password、token或sessionId。 - 安全要求:这些敏感信息不应该暴露给客户端或经过代理服务器。
- 网关处理:使用
RewriteResponseHeader将敏感参数替换为占位符(如***),确保即使响应头被记录或转发,也不会泄露敏感信息。- 响应头:
Location: /42?user=ford&password=omg!what&flag=true - 修改后:
Location: /42?user=ford&password=***&flag=true
- 响应头:
场景 2:修正响应头格式(兼容性修复)
- 问题:某些后端服务返回的响应头格式不符合标准,例如
X-Response-Red字段中包含了多余的空格或特殊字符。 - 需求:前端或客户端期望的是标准化的格式。
- 网关修正:通过正则表达式匹配并替换,将响应头格式化为前端期望的样子。
- 例如:将
X-Response-Red: value1, value2, value3中的多余空格去除 - 配置:
RewriteResponseHeader=X-Response-Red, ,\s+, , - 结果:
X-Response-Red: value1,value2,value3
- 例如:将
场景 3:动态替换域名(环境适配)
- 场景:在开发、测试、生产环境中,后端服务返回的响应头中可能包含硬编码的域名。
- 需求:需要根据当前环境动态替换响应头中的域名。
- 网关处理:使用正则表达式匹配旧域名并替换为新域名。
- 配置:
RewriteResponseHeader=Location, https://old-domain.com, https://new-domain.com - 响应头:
Location: https://old-domain.com/api/resource - 修改后:
Location: https://new-domain.com/api/resource
- 配置: