使用Tomcat传url地址中包含大括号{}的特殊字符无法识别问题多种解决方法

零、简单粗暴,更换Tomcat版本为能识别的版本

该点参考自博主 Carino_U 文章 https://blog.csdn.net/Carino_U/article/details/78973120

 根据rfc规范,url中不允许有 |,{,}等特殊字符,但在实际生产中还是有些url有可能携带有这些字符,特别是|还是较为常见的。在tomcat升级到8以后,对url字符的检查都变严格了,如果出现这类字符,tomcat将直接返回400状态码。

    后来有人对此提出了异义,见:    https://bz.apache.org/bugzilla/show_bug.cgi?id=60594

    经过一番讨价还价,tomcat的开发人员增加一项设置,允许配置在url可以出现的特殊字符,但也仅限于|,{,}三种,见:http://tomcat.apache.org/tomcat-8.0-doc/config/systemprops.html#Other

    该项设置在以下版本的tomcat中有效:

    - 8.5.x for 8.5.12 onwards  https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.12/bin/

    - 8.0.x for 8.0.42 onwards  https://archive.apache.org/dist/tomcat/tomcat-8/v8.0.42/bin/

    - 7.0.x for 7.0.76 onwards  https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.76/bin/

 

一、对URL进行转码解决特殊字符

    使用URLEncoder、URLDecoder进行URL参数的转码与解码 

encodeURIComponent() 用于参数的传递,参数包含特殊字符可能会造成间断。encodeURIComponent方法返回一个已编码的 URI。如果您将编码结果传递给,那么将返回初始的字符串。因为encodeURIComponent方法对所有的字符编码,请注意,如果该字符串代表一个路径,例如/folder1/folder2/default.html,其中的斜杠也将被编码。这样一来,当该编码结果被作为请求发送到 web 服务器时将是无效的。

encodeURI()用于整个url编码,如果字符串中包含不止一个 URI 组件,请使用encodeURI方法进行编码。encodeURI不编码字符有82个:!#$&'()*+,-./:;=?@_~0-9a-zA-Z

 

二、修改Tomcat的配置文件,使其零时支持特殊符号

    修改tomcat的conf文件夹下的catelina.properties文件,拖到最后,启用该配置,我需要用到{},所以增加了{}

    

emmm,不过这样修改后,后面有时更新的话重新加载配置,所有配置会重置,年少时的我这样做之后,天天频繁修改这个配置,这酸爽不说也罢,每每想起还会在晚上做噩梦,垂死病中惊坐起!

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值