美文网首页
java.lang.IllegalArgumentExcepti

java.lang.IllegalArgumentExcepti

作者: hangjun | 来源:发表于2018-07-11 11:27 被阅读0次

前言

最近公司tomcat6.0.22升级到tomcat7.一开始升级到tomcat7.0.65没有什么问题,公司要求升级到最新的版本,然后升级到tomcat7.0.88.升级后启动完成没有问题,但是调一个接口的时候报了The valid characters are defined in RFC 7230 and RFC 3986

寻找解决方案

网上查找解决方案,都是说Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。
具体来说,就是添加了些规则去限制HTTP头的规范性。
具体解释可以参考这篇文章(这里谢谢前人的引路哈)
请点击---文章
原因是这个原因,我的请求路径中含有【】,但是网上说的解决方案,我亲身此时我的这个高版本好像并没有用。

这里我就简单总结一下,网上大部分的解决方案有以下的几种

  • 解决方法1
    最轻便的方法,更换tomcat版本。此方法比较快。
  • 解决办法2:
    前端对相应的参数进行编码,就是将所有的参数都进行编码
  • 解决办法3:
    配置tomcat的catalina.properties
    添加或者修改:
    tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}

针对方法1,本公司需要升级到最新的版本,解决安全漏洞文件,所以不考虑。
针对方法2,因为是升级tomcat,如果修改前端代码,修改代价太大了。
针对方法3,试过无效

最终解决方案

本人也是方法3在tomcat官方文档中查到线索,官网文档说这个配置已经过时了(题外话:还是要英语学得好,看知识没烦恼,最近准备好好学习学习英语),需要使用Connector中relaxedPathChars和relaxedQueryChars属性可以解决问题。
找到tomcat/conf/server.xml
找到Connector中增加这两个配置,配置如下

<Connector port="8080" protocol="HTTP/1.1"    relaxedPathChars="[]{}|\^" relaxedQueryChars="[]{}|\^" />

相关文章

网友评论

      本文标题:java.lang.IllegalArgumentExcepti

      本文链接:https://www.haomeiwen.com/subject/ujsqpftx.html