Tomcat高版本中特殊字符问题 :java.lang.IllegalArgumentException: Invalid character found in the request target

post请求,请求中带有JSON格式的参数。在tomcat8.5.3、tomcat9中,请求会被拦截,在tomcat7.0.84中就不会。

JSON:

{

    "aaa": [758, 2392],

    "bbb": [755],

    "ccc": [760]

}

报错:

原因:

查了资料,大部分都说是新的标准中,请求不支持“{}”,但是把大括号转义之后还是出现同样的问题,后来把中括号转义后就可以了。找到问题的原因了:

由于json中带有“[]”,请求会被tomcat拦截。这个我有点不是很理解,按照RFC7230和3986中的定义,“[]”应该是保留字,不应该被拦截的。这个有点不懂了,没细看。

 

根据网上找到的各种牛人的解决方案,总结了一下:

1.换到低版本的Tomcat,这个忽略了。不过换到tomcat7.0.84 确实没问题。

2.在Catalina.properties中添加

tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}

这个东西明显是允许“|”和大括号的,但是我现在的问题是中括号,不过本着试一试无妨的态度,试了一下,问题没有解决。

3.添加

tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

这个是允许url中带有特殊字符的。试过了,也不好使。

到这里似乎就卡住了。

晚上准备再写几个bug,测试的时候,出现了一个错误:StackOverFlow,那就去看看。

由于英文实在太蹩脚,我就直接把错误提示粘贴到了搜索框中,之后找到了这么个页面:

https://stackoverflow.com/questions/41053653/tomcat-8-is-not-able-to-handle-get-request-with-in-query-parameters

这个是回答tomcat8不能在请求url中使用“|”的问题,然后略过了我已经试过的方法,找到了一个没有试过的

这哥们跟我遇到了同样的问题!!!!然后,我就按着他的方法在Server.xml的Connector中添加了这个

relaxedQueryChars="[,]"

而且,根据这哥们说的,如果还有其他特殊的字符串,可以直接添加到这个属性里,不过我没试。

 

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值