方法一:更换Tomcat版本为能识别的版本
根据rfc规范,url中不允许有 |,{,}等特殊字符,但在实际生产中还是有些url有可能携带有这些字符,特别是|还是较为常见的。在tomcat升级到8以后,对url字符的检查都变严格了,如果出现这类字符,tomcat将直接返回400状态码。
更改至以下版本的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进行转码解决特殊字符
使用encodeURI()、URLDecoder进行URL参数的转码与解码
encodeURI()用于含有特殊字符的参数编码,如encodeURI(encodeURI(id))
encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
方法三:修改Tomcat的配置文件,使其零时支持特殊符号
修改tomcat的conf文件夹下的catelina.properties文件,拖到最后,启用该配置,我需要用到{},所以增加了{}