tomcat高版本之URL解析异常解决

IllegalArgumentException

一、项目场景:

例如:由于Apache的tomcat的版本升级,遵循RFC 7230 and RFC 3986规范解析请求地址。同时添加了对于http头的验证请求。

导致报文存在导致特殊字符(不在解析范围内的)tomcat7.0.65以上的版本会出现java.lang.IllegalArgumentException。

请求报文如下:

http://127.0.0.1:8180/appname/doTestTransaction.action?reqJson={"app.xxx":"xxx","app.xxx":"xxx","app.xxx":"xxx",""app.xxx":"xxx"":[{"app.xxx":"xxx","app.xxx":"xxx","app.xxx":"xxx"}]}


二、问题描述:

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:476) ~[tomcat-embed-core-8.5.28.jar:8.5.28]at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:687) ~[tomcat-embed-core-8.5.28.jar:8.5.28]at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.28.jar:8.5.28]at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790) [tomcat-embed-core-8.5.28.jar:8.5.28]at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459) [tomcat-embed-core-8.5.28.jar:8.5.28]at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.28.jar:8.5.28]at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_161]at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_161]at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.28.jar:8.5.28]at java.lang.Thread.run(Thread.java:748) [na:1.8.0_161]


原因分析:

tomcat高版本严格按照RFC 3986规范解析地址。
该规范只允许包含 a-zA-Z 0-9 - _ . ~ 以及所有保留字符 ! * ’ ( ) ; : @ & = + $ , / ? # [ ]
另高版本的tomcat添加了对于http头的验证。

因为我的请求报文中出现了[]、{},所以使用高版本的会报错

解决方案:

方案一:替换低版本(<=7.0.65)的tomcat

方案二:

Tomcat 7.0.76, 8.0.42, 8.5.12 这些版本之后可以定义requestTargetAllow 属性来允许禁止的字符。

在tomcat的 catalina.properties文件中添加这一句:tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}表示放行{}

补充:7.0.76之后的版本针对上面的配置不建议使用,已经废弃。(可参考官方说明)

继方案二(最终解决):

去了官网文档查看说:tomcat.util.http.parser.HttpParser. requestTargetAllow
(This system property is deprecated. Use the relaxedPathChars and relaxedQueryChars attributes of the Connector instead)

连接器配置relaxedPathChars 和relaxedQueryChars 参考(官方文档)如下:

最终 在./conf/service.xml中添加realxedQueryChars属性:

onnector port="8080" protocol="HTTP/1.1"connectionTimeout="30000"maxThreads="800"minSpareThreads="50"redirectPort="8443"relaxedQueryChars="[,],|,{,},^,&#x5c;,&#x60;,&quot;,&lt;,&gt;"/>


 
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建型、结构型、行为型模式(2)

来源&#xff1a;http://blog.csdn.net/wulingmin21/article/details/6757111 创建型模式 Singleton模式解决的是实体对象个数的问题。 除了Singleton之外&#xff0c;其他创建型模式解决的都是New所带来的耦合关系。 Factory Method&#xff0c;Abstract Factory&#xff0c;B…

大数据行业洞察:未来2-3年或迎数据时代的真正高潮

来源&#xff1a; DT数据侠 作者&#xff1a;中关村老李从2012年的“用户标签”到2014年的“用户画像”&#xff0c;从2015年的“大数据”到2017年的“人工智能”&#xff0c;大数据正在从神坛走向现实。“标签”到“画像”&#xff0c;代表着数据在数量和维度上&#xff0c;逐…

5G时代到来,人工智能设备如何重塑TMT行业

来源&#xff1a;亿欧在近期召开的2018世界移动通信大会上&#xff0c;5G作为热点话题被高频提及&#xff0c;当前&#xff0c;5G技术已经取得突破进展&#xff0c;全球范围内已有运营商宣布2018年将投入商用。在这一背景下&#xff0c;5G与人工智能技术的结合将重塑众多产业&a…

java调用GDAL实现栅格数据的重采样的一种方法

目录 1.关于重采样 1.1概念 1.2用途 1.3常见算法 2.关于GDAL 2.1GDAL中的重采样算法 3.实现重采样 3.1思路 3.2完整代码 3.3使用QGIS验证效果 1.关于重采样 1.1概念 重采样是以原始图像的像元值或者导出的值填充到新的图像的每个像元的的过程。 1.2用途 在地理信…

Semtech与Lacuna从太空接收信息

来源&#xff1a;Semtech概要&#xff1a;Lacuna Space使用了一组星座的极地近地轨道卫星&#xff0c;来接收地面传感器发出的基于LoRa的信息。加利福尼亚州&#xff0c;卡马里奥&#xff0c;2018年2月26日—高性能模拟和混合信号半导体及先进算法领先供应商Semtech Corporatio…

ABAP--使用SLIN事务码进行ABAP程序扩展语法检查,提高程序开发的质量

TCODE: SLIN 或者在SE38 界面的菜单&#xff1a; 程序&#xff0d;》语法&#xff0d;》扩展程序检查 就会弹出下面的界面&#xff0c;用户可以根据自己的需求设置检查点&#xff0c;并根据检查结果修改程序&#xff0c;使自己的代码更加可靠。另外在SE38 界面的菜单&#xff1…

谷歌大脑发布神经网络的「核磁共振」,并公开相关代码

作者&#xff1a;杨晓凡、camel、思颖、杨文神经网络的可解释性一直是所有研究人员心头的一团乌云。传统的尝试进行可解释性研究的方法是通过查看网络中哪个神经元被激发来来理解&#xff0c;但是即使我们知道「第 538 号神经元被激发了一点点」也毫无意义&#xff0c;并不能帮…

Java加密与解密的艺术~Provider

Provider类实现了Java安全性的一部分或全部&#xff0c;我们称它为提供者。 Provider类可能实现的服务包括&#xff1a; 算法&#xff08;如DSA、RSA、MD5或SHA-1&#xff09; 密钥的生成、转换和管理设施&#xff08;如用于特定算法的密钥&#xff09; 每个提供者…

Fiddler (一) 教程(Web调试工具)

From&#xff1a;http://kb.cnblogs.com/page/130367/ Fiddler的基本介绍 Fiddler 官方网站&#xff1a;http://www.fiddler2.com Fiddler 官方帮助&#xff1a;http://docs.telerik.com/fiddler/knowledgebase/quickexec Fiddler 官方网站提供了大量的帮助文档和视频教程&…

从通用分页存储过程[ROWCOUNT方式]抽出适合自己需求的分页过程

通用分页存储过程很实用,但毕竟不是全适用于一些环境,譬如我遇到过一种情况,需要先外链两个表,然后再关联几个表,总之参数传递很烦人,这里不细说了,现在只谈实现查询后,怎么分页的简单技巧1,建立用户函数CREATE function F_xxxx(ID nvarchar(36),Key nvarchar(36),......)…

量子计算机就要来了,它真的能改变世界吗?

来源&#xff1a;网易科技概要&#xff1a;量子计算机的理论运行速度远远超出任何传统的超级计算机。在位于纽约市以北约50英里处僻静乡村中的一个小型实验室内&#xff0c;天花板下缠绕着错综复杂的管线和电子设备。这一堆看似杂乱无章的设备是一台计算机。它与世界上的任何一…

Fiddler (二) : Script 的 用法

Fiddler (二) Script 用法(转)&#xff1a;http://www.cnblogs.com/mrzhoushare/articles/4953592.html Fiddler 高级用法&#xff1a;Fiddler Script 与 HTTP 断点调试&#xff1a;http://www.cnblogs.com/hushaojun/p/5644645.html 通过前一篇博客 【Fiddler教程】&#xff0…

CSDN与易观联合发布《2017-2018中国人工智能产业路线图》

来源&#xff1a;机器人大讲堂下载链接:https://pan.baidu.com/s/1ViNbtAi-wGJbLURyYp30TA 密码:a3dz未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评…

网站时间显示

网站时间显示2<STYLE>A.menuitem {}{ COLOR: menutext; TEXT-DECORATION: none } A.menuitem:hover {}{ COLOR: highlighttext; BACKGROUND-COLOR: highlight } DIV.contextmenu {}{ BORDER-RIGHT: 2px outset; BORDER-TOP: 2px outset; Z-INDEX: 999; VISIBILITY: hidde…

直击2018AWE:智能语言交互大厮杀、老品牌争先搭建平台、第三方平台迅速崛起

来源&#xff1a;物联网智库一年一度家电盛宴&#xff0c;中国家电及消费电子博览会&#xff08;AWE&#xff09;在上海新国际博览中心拉开帷幕&#xff01;一大批智能家电产品不断发酵&#xff0c;白电、黑电、小家电等让人应接不暇。除了不断精进的颜值外&#xff0c;科技感更…

数据安全架构设计与实战~如何加密结构化数据

针对结构化数据&#xff08;数据库、key-value等&#xff09;&#xff0c;加密主要有两种方式&#xff1a; 1、应用层字段加密&#xff0c;数据在入库前加密&#xff0c;直接向数据库中写入字段密文&#xff1b; 2、存储系统透明加密&#xff08;静态加密&#xff09;&#x…

浙江大学吴朝晖:脑机融合系统综述

来源&#xff1a; 神经科技本文发表于《生命科学》&#xff08;Chinese Bulletin of Life Sciences&#xff09;第26卷 第6期 2014年6月DOI: 10.13376/j.cbls/2014090脑机融合系统综述吴朝晖*&#xff0c;俞一鹏&#xff0c;潘 纲&#xff0c;王跃明(浙江大学计算机科学与技术…

数据安全架构设计与实战~思维导图

#原图 System.out.println("https://www.processon.com/view/link/619cccede0b34d032a78237d");

apt-get、apt、yum、dpkg、rpm

apt-get 命令详解(中文)以及实例&#xff1a;http://blog.51yip.com/linux/1176.html linux yum命令详解&#xff1a;http://www.cnblogs.com/chuncn/archive/2010/10/17/1853915.html 配置 yum 源的两种方法&#xff1a;http://www.cnblogs.com/shuaixf/archive/2011/11/30/22…

下一版Win10,微软人工智能平台Windows ML要和你见面了

原作 Kam VedBratRoot 编译自 Windows blog量子位 出品 | 公众号 QbitAI今日&#xff0c;微软在开发者日上发布了AI开发者平台。微软还提到&#xff0c;旗下产品都可以本地直接处理AI任务。另外Win10系统将会Visual Studio 15.7 预览版上增加了ONNX文档到UWP应用里&#xff0c;…