本文主要是介绍[神坑已解决]Http请求参数中的加号被转换为空格的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问题场景 (着急解决的小伙伴可以直接看场景总结)
String str = Base64Util.getBase64Encode(“小狗”)//调用方使用该方法加密得到值小狗的加密编码str:sdfsdf+sdf
前端传参数之前,将参数值加密为sdfsdf+sdf,传递给后端之后,后端tomcat自动将str中的加号变为空格 ->> sdfsdf sdf(🤬🤬🤬这就是后端接收到的参数值param,加号未被识别变成了空格)
Base64Util.getBase64Decoder(param)//后端接口使用该方法解密//解密之后得到的值是乱码的,因为他之前加密出来的数据被修改了。(加号变成了空格!!!)
所以我们要将后端解密的时候的值作修改,进而解密得到正确的数据。
加密后的数据 ->> tomcat ->> 解密数据
加密后的数据 ->> 二次加密(为了经过tomcat之后,后端收到的参数就是加密后的编码) ->> tomcat ->> 解密数据
场景总结:你给后端传参,参数里有加号,tomcat会将加号变为空格,导致后端接收入参错误。
解决方法😎:二次加密,%2B转换为空格
String paramNew = URLEncoder.encode(str, "UTF-8");//str是头次加密得到的编码,将其使用URLEncoder进行二次加密
利用tomcat的另外一个属性,会将%2B转换为加号,那我们就将第一次加密后的数据(这个加密编码中是含有加号的)再次使用上述URLEncoder进行加密,加密之后就会将头次加密编码中的加号事先转换为%2B。
这篇关于[神坑已解决]Http请求参数中的加号被转换为空格的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!