MapRequestHeader GatewayFilter 工厂
MapRequestHeader GatewayFilter 工厂接受 fromHeader 和 toHeader 两个参数。
功能逻辑: 它会创建一个新的命名 Header (toHeader),其值是从传入的 HTTP 请求中现有的命名 Header (fromHeader) 中提取的。
- 如果输入的 Header (
fromHeader) 不存在,则该过滤器不产生任何影响。 - 如果新的命名 Header (
toHeader) 已经存在,则提取出的值会被追加到现有值之后(增强)。
配置示例
以下示例配置了一个 MapRequestHeader:
application.yml
yaml
spring:
cloud:
gateway:
routes:
- id: map_request_header_route
uri: https://example.org
filters:
- MapRequestHeader=Blue, X-Request-Red效果: 此配置会将 X-Request-Red:<values> Header 添加到下游请求中,其中的 <values> 来自于传入 HTTP 请求的 Blue Header 的值。简单来说,就是把请求头 Blue 的值复制(或映射)给 X-Request-Red。
补充教学 —— 为什么要用 MapRequestHeader?
场景举例:老系统迁移或协议适配
假设你有一个旧的客户端 App,它在发送请求时,把用户的 Token 放在了一个叫 Blue 的非标准 Header 里。 但是,你的新版微服务后端(下游服务)只识别标准的或者自定义的 X-Request-Red Header。
- 不改客户端:你不想强迫旧版 App 升级发版。
- 不改服务端:你也不想为了兼容旧版 App 专门去改后端的代码读取逻辑。
- 网关层适配:使用
MapRequestHeader=Blue, X-Request-Red。- 网关收到请求,看到有
Blue。 - 网关自动把
Blue的值读出来,塞给X-Request-Red。 - 后端微服务收到了
X-Request-Red,处理逻辑一切正常。
- 网关收到请求,看到有
这是一个典型的适配器模式在网关层的应用。