tomcat自动URLDecode解码问题(+号变空格)
最近项目中出现一个问题,就是前段调后端接口,参数带+号,传到后端后+号自动URLDecode成空格了。
1.问题排查
条件:tomcat配置server.xml有URIEncoding="UTF-8"
1.1get请求、post请求(参数跟在URL的后面),request.getParameter("token")中token会被自动URLDecode。而request.getQueryString()获得的值则是浏览器传的原值。
如果有中文,浏览器会自动转义,谷歌浏览器在view source上可以看到浏览器往后端传之前的参数值。

1.2post请求(参数在body里面),request.getQueryString()值为空, request.getParameter("token")中token不会被自动URLDecode,而且中文乱码。
加上
request.setCharacterEncoding("UTF-8");
后,中文不乱码,但是token也不会自动URLDecode。
1.3去掉tomcat配置的URIEncoding="UTF-8",在1.1情况下token参数也会被自动URLDecode,此时采用tomcat默认的编码方式。
2.深入tomcat解析
3.临时解决方案
1.如果发现+号编码了,那么解码一下
2.如果发现uss有空格,说明+号被URLDecode成空格,那么URLEncode一下就变成原来的值
// 1.如果发现+号编码了,那么解码一下
if (uss.contains("%2b") || uss.contains("%2B")) {
uss = URLDecoder.decode(uss, "UTF-8");
}
// 2.如果发现uss有空格,说明+号被URLDecode成空格,那么URLEncode一下就变成原来的值
if (uss.contains(" ")) {
uss = URLEncoder.encode(uss, "UTF-8");
}
参考博客:
https://blog.csdn.net/vickyway/article/details/46375971
https://muchstudy.com/2017/12/06/字符解码时加号解码为空格问题探究/
tomcat自动URLDecode解码问题(+号变空格)的更多相关文章
- 对于querystring取值时候发生+号变空格的问题
今天遇到这个问题,在网上找了几个答案,解决了问题,很高兴,所以贴出来给大家分享一下: URL如下 http://127.0.0.1/test/test.aspx?sql= and id='300+' ...
- base64码通过http传输 +号变 空格 问题解决
通过七牛云base64上传图片,通过官方示例上传成功后,根据示例改了一个controller. 通过前端往后端传base64码形式进行测试.死活不通过,七牛报400. 仔细排查后发现,示例转换的bas ...
- base64码通过http传输 +号变 空格 以及 图片编码后字符串较长导致POST提交失败 问题解决
场景:图片上传OSS存储,接口拿字符串去接前端传的base64码,服务器打印入参传的值,发现和前端打印的值有所区别,服务器中打印的值所有+号全部变成空格. 解决办法: Java中使用:url = ur ...
- 加号变空格问题 url参数 post get 请求发送
问题:加号后台接收变空格问题 结论: 1.任何get拼接的请求 参数key value 需要编码后在拼接 2.get请求避免做数据提交,用post提交.jq,axios的post提交默认编码了不会有问 ...
- 实用脚本----Linux下Jdk和Tomcat自动安装shell脚本总结
系统环境为:ubuntu 14.04 一.JDK 自动安装脚本 jdk自动安装bash shell脚本,截止今天(2014/10/15)亲测可用: sudo su #切换到root权限 mkdir / ...
- 解决url传递过程中加号变空格的问题
url传递过程中加号变空格 在接收url参数的过程中,会发现如果参数中存在‘+’号,接收后会变成空格. 如11+22接收后变成11 22. 要解决这个问题,需要将加号替换为%2B进行传递. 如11%2 ...
- 解决url传递过程中加号变空格的问题<转>
url传递过程中加号变空格在接收url参数的过程中,会发现如果参数中存在‘+’号,接收后会变成空格. 如11+22接收后变成11 22.要解决这个问题,需要将加号替换为%2B进行传递. 如11%2B2 ...
- 关于不重启Tomcat自动加载改变的class文件
修改server.xml,在Host标签下加入以下配置 <Context path="" docBase="FileManager" reloadable ...
- Http请求特殊符号变空格
Http请求特殊符号变空格 今天在调试客户端向服务器传递参数时,url中的参数值出现+,空格,/,?,%,#,&等特殊符号的时候就自动变成空格,在服务器端无法获得正确的参数值.解决方法如下: ...
随机推荐
- js实现 导航移入移出效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- pyspark使用
1.安装python3 2.idea安装Python插件 3.下载spark,设置SPARK_HOME环境变量 4.安装pyspark,numpy 5.运行pyspark应用 pyspark应用如果使 ...
- Java: 数据类型
核心:对事物的某种规范 前提: 1.JAVA:JAVA程序的运行是以堆栈的操作来完成的 堆栈以帧为单位保存线程的状态. JVM对堆栈只进行两种操作:以帧为单位的压栈和出栈操作. 理解 ...
- JS 在HTML页面显示当前日期
代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <t ...
- Ubuntu下SVN服务器安装和配置
一.SVN安装1.安装包$ sudo apt-get install subversion 2.添加svn管理用户及subversion组#添加用户$ sudo adduser svnuser#添加 ...
- onvif开发实战2--总结框架搭建
完成框架搭建后,编写自己的主函数起onvif服务 编写makefile objs = onvif.o onvif_func.o duration.o soapC.o soapServer.o stds ...
- Impala的安装(含使用CM安装 和 手动安装)(图文详解)
Impala有两种安装方式: 1)使用CM安装Impala 2)手动安装Impala 注意:Impala不支持在Debian/Ubuntu, SuSE, RHEL/CentOS 6.5系统中安装. 基 ...
- Elasticsearch之插件扩展
Elasticsearch之插件介绍及安装 Elasticsearch之head插件安装之后的浏览详解 Elasticsearch之kopf插件安装之后的浏览详解 Elasticsearch-2.4. ...
- 一句话解决Ping问题(主机,开发板,虚拟机)
PC机使用网卡A连接开发板,VMWare就要使用同一个网卡A作为桥接网卡 步骤: 1.确定网卡A 2.VMWare选择网卡A作为桥接网卡 3.设置三者IP在同一网段 a.Windows网卡A的IP b ...
- nginx安装部署+增加媒体播放模块
nginx安装很简单,但是有的时候是已经安装的nginx ,升级增加nginx 模块功能. 最近公司要nginx增加一个可以播放 MP4的模块,安装还算顺利,不说废话上命令. 1 安装依赖 yum i ...