SpringBoot之RestTemplate在URL中转义字符的问题

参考

Spring Boot之RestTemplate在URL中转义字符禁止转义的问题解决

问题复现

最近在做一个拖曳验证码的功能,需要在url后面将verify的字符串附上再由服务端进行比对。问题就出在这里了。
使用的是springBoot的resetTemplate,发现了一个问题,
客户端得到的校验字符为:

/xB55xDWN4ggI1BI9vaSnO82505DZWky0nKm5Y0z/49LwshUcgQCSY/v5a+XT865iO57+LbTFg0+7sZwBcT9Tw==

通过resetTemplate编码后的url为:

/api/user/loginByAccnt?captchaVerification=/xB55xDWN4ggI1BI9vaSnO82505DZWky0nKm5Y0z/49LwshUcgQCSY/v5a+XT865iO57+LbTFg0+7sZwBcT9Tw%3D%3D

服务端获得的校验字符为:

/xB55xDWN4ggI1BI9vaSnO82505DZWky0nKm5Y0z/49LwshUcgQCSY/v5a XT865iO57 LbTFg0 7sZwBcT9Tw==

中间是有空格的。。。
一比较,首先一个就是+ 号 没有转换。。。服务端识别成为空格了。
拿encodeURIComponent来试试,可以得到:

/api/user/loginByAccnt?captchaVerification=%2FxB55xDWN4ggI1BI9vaSnO82505DZWky0nKm5Y0z%2F49LwshUcgQCSY%2Fv5a%2BXT865iO57%2BLbTFg0%2B7sZwBcT9Tw%3D%3D

嗯?具体查找一下资料,发现问题:

根据 RFC 3986 加号等符号的确实可以出现在参数中的,而且不需要编码,有问题的在于服务端的解析没有与时俱进
注意SpringBoot2.0版本的url参数编码,默认只会针对 = 和 & 进行处理;为了兼容我们一般的后端的url编解码处理在需要编码参数时

好了,发现是springBoot的ResetTemplate逻辑太新了。
下面得到解决方案:

方案1:

//伪代码
UriComponentsBuilder builder = UriComponentsBuilder
                    .fromHttpUrl(desktopConfig.apiUrl+"/"+this._login_uri_by_userName
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值