url被base64编码后,再经过urlEncoder转义,因为base64中不包含%,所以可以根据%判断,使用递归将Url转义回来。
// =======================以下是encode===================================
private String encodeMessage(){
// 先base64,然后再encode
Stirng message = "{a:xx,b:yy}";
String encoderMsg = EncodeUtils.encodeBase64(message);
String resultUrl = URLEncoder.encode(encoderMsg , "utf-8");
}
// =======================以下是decode===================================
// decode,因为base64不含有%,所以可以根据%判断,被encode了几次,然后再decode相同次数
private String getDecodeUrl(String message){
String value = getUrlDecoder(cookie.getValue());
String finalMsg = new String(Base64.decodeBase64(value.getBytes()), StandardCharsets.UTF_8);
return finalMsg;
}
// 递归 decode
private String getUrlDecoder(String url) throws Exception{
if(StringUtil.isEmpty(url)){
return url;
}
if(url.contains("%")){
return getUrlDecoder(URLDecoder.decode(url,"UTF-8"));
}else{
return url;
}
}
encode转义字符:URLDecoder.decode()转义处理_北方世界最强者的博客-优快云博客_urldecoder