String params= ThreeDes.encryptThreeDESECB(userId + "," + channelId +"," + activityId);
params = URLEncoder.encode(params,"UTF-8");
参数ThreeDes加密后 在经过utf-8编码encode;
String p ="https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appId;
url = p +"&redirect_uri=" + URLEncoder.encode(shareUrl, "UTF-8");
shareUrl再经过utf-8编码
此时encode两次 一些字符编码两次成为+格式
String p =URLEncoder.encode(ThreeDes.encryptThreeDESECB(user.getUserId() + ","+ channelId + "," + activityId), "UTF-8");
StringshareUrl = baseUrl+"/investShare/shareWeixin/v1.0?params=" +URLEncoder.encode(p, "UTF-8");
ThreeDES加密获取的userId、channelId activityId、用UTF-8encode、生成一个分享链接
方法体中:
String param =request.getParameter(“params”);
String decode= URLDecoder.decode(sharedParam);
再用ThreeDES解密 获取参数
String[]params = ThreeDes.decryptThreeDESECB(decode).split(",");
此时分享的url为当前页面的链接 此链接在方法中生成
StringbaseUrl = request.getRequestURL().substring(0,
request.getRequestURL().length()- request.getRequestURI().length())
+ request.getContextPath();
url未经过utf-8编码
由于request.getParameter(“params”);方法
会自动进行一次解码(使用iso-8859-1格式)
将+解码为‘+’
在进行解码时 +解码成 “ ”
进行ThreeDes.decryptThreeDESECB解密时 会被解析成乱码
而产生服务器端报错
调用方法生成url及访问url进入controller层跳转页面时
Decode与encode次数要保持一致否则会导致一些难以察觉的错误