美文网首页
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