BUG的如何产生的
今天在跟三方对接时发现的一个问题,我这边生成给三方调用接口使用的token返回的时候是带有+
号的,然后三方调用接口传给我的也是带+
号的,奇怪的现象发生了我这边接收的时候+
号全变成空格
了,最终导致验签失败了。
如何解决的
经过一波查询得知,URL中带有+号属于特殊符号,默认会进行转义。
有以下几种解决方案:
- 让三方的开发把
+
号统一都转换为%2B
,然后我这边接收就是正常的了 - 我这边把服务端接收到的token中的
空格
全部替换为+
号
当然这个问题是一个很简单的问题,主要是自己起初写生成token时也没注意到这个问题,所以我选择了第2个方案
生成token的方法用的 hutool 工具里的AES
//16位AES对称密钥
SecureUtil.aes("0123456789123456".getBytes()).encryptBase64(data);
最终完成替换的部分代码
//第一种encode后替换
String token = "UMa9cJPXvD5lw/AUJOqtZH9LWS6g2ORAQvR/T 0KJY3bXBGthDB0w/avi0ZLSptS/t1KbsD1rLvEX30U0QmVPiZ9MB9EblYxTrgSjxmXmYajSZ0FRd0IeoADI7xI/wEaRmb8kPzPt/AzrxZ/B yzmvsVqMy5hLnkX2fh3jjj1 ktiOjA2VhIywO8NkZYlSPeSn1KWqypBf/RziIci f69jx1q9IHUkaO15o2CEbn8tLi/9wdK0AzZe67YaweezS6uuqbuD3SQ3ENKH083rEnloF9fGqiZpU9MUlv/IOa2uR3D03rqtlKPqAeJoox1oDpACUhzpppUtldEIytnxY3gQ==";
String stToken = URLUtil.encode(token).replaceAll("%20", "+");
//第二种提示空格替换
String stToken = URLUtil.encode(token).replaceAll(" ", "+");