RewriteRequestParameter GatewayFilter 工厂
RewriteRequestParameter GatewayFilter 工厂接受一个 name(名称)参数和一个 replacement(替换值)参数。 它将重写给定 name 的请求参数的值。
- 如果设置了多个具有相同
name的请求参数,它们将被替换为单个值。 - 如果未找到请求参数,则不会进行任何更改。
以下示例配置了一个 RewriteRequestParameter GatewayFilter:
示例 1. application.yml
yaml
spring:
cloud:
gateway:
routes:
- id: rewriterequestparameter_route
uri: https://example.org
predicates:
- Path=/products
filters:
- RewriteRequestParameter=campaign, fall2023作用: 对于请求 /products?campaign=old,此配置会将请求参数设置为 campaign=fall2023。
补充教学 —— 为什么要重写请求参数?
场景 1:强制覆盖参数(活动统一)
- 前端现状:用户的收藏夹里可能保存了旧的活动链接,比如
?campaign=summer_sale。 - 业务需求:现在是秋季大促,无论用户带什么活动码进来,只要访问
/products,统统算作fall2023的业绩。 - 解决:使用
RewriteRequestParameter=campaign, fall2023。- 请求:
GET /products?campaign=summer_sale - 转发:
GET /products?campaign=fall2023
- 请求:
场景 2:修正错误参数
- 前端 Bug:某个版本的 App 发出的请求参数值写错了(例如
status=actve少了个 i)。 - 后端要求:必须是
status=active。 - 网关修正:虽然这通常应该修前端 Bug,但在 App 发版审核期间,网关可以临时通过重写参数来从服务端“修复”这个问题,保证业务正常。