转发呼叫者的查询字节, 而不是编码两次

FixAPIService
已装运
2026年8月7日 04:07 UTC
作者
Kamo
提交
3c24d32

此网关所构建的每个 URL 都由 getreatURI () 组装 获得查询链( ) —— 两者都已经编码了% —— 然后被移交给 以字符串的形式休息 。 RestTemplate 的字符串超载不使用 URL; 它们 取一个 URI TEMPLATE, 由休眠的默认UriBuilder Factory 扩展 在EncodingMode.URI COMPONENT中配置. 该模式编码每个组件,和 '%' 不是 pchar, 所以已有的逃出再次被逃脱 :% 2C 以% 252C 形式离开 。 上游服务解码一次并收到字面符号 A% 2CB — 1 调用者发送两个值。 前置( ) 是每个 /api/<x>/**路由,因此/api/docs,/api/security,/api/kb,/api/media等 全部同时受到影响; 没有保留字符的值是一个固定点, 这使得它间断和容易错过。 to UpstreamUri () 解析 URL 和 URI 交换超载 。 模板处理器,所以字节横跨跳动。 这是故意的,不是 直接交换URI.create。 那种方法THROWS在一个 在 URI 中非法的字符 —— 一个原始空格, “ ” , “ ” , “ ” , “ ” , 短跑 。 - 而这样的要求在今天有效 正是因为第二个编码修复它。 在非法参数排除时, 帮助者返回无效, 呼叫者交出 字符串与以前完全相同,使用一个 WARN 命名 URL 。 可见而不是沉默。 正确的交通停止被操纵;畸形 交通行为完全一样。 本级所有5个交换站点—— 前方、前方Webhook、前方Callback和两个Webhook POST帮助者——去 通过一个交换 上游,所以两个编码 不能漂移每个呼叫站点。 测试通过MockRestServiceServer, 证实实际离开RestTemplate的URI 而不是帮助者的返回值,因为编码发生在内部 休眠: 状态=PENDIN% 2CIN PROGRESS 到达时的状态为 编码和在任何地方没有% 25 ; 字符串超载被固定为 双编码; 原始空间, 截取的% 2 和 {id} 括号每个倒回 而不是扔出; 而普通的重复段落查询是不会改变的。 mvn-o测试:29个测试,0个失败.

所有更改

就像你看到的运输?

每一个都自动更新您工作空间的地盘。 开始自由,看它成长 一周又一周.

永远开始自由查看定价