Skip to content

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 发版审核期间,网关可以临时通过重写参数来从服务端“修复”这个问题,保证业务正常。

Based on Spring Framework.