2017-02-20 11 views
4

這裏的錯誤,當我嘗試發送與URL的GET請求在我的Java web應用程序:我的本地機器的URL看起來像這樣http://localhost:8080/test?param1=1|2&param2=3343434如何讓Apache Tomcat 8.0.41允許URL GET請求中的管道字符?

2017年2月20日下午四點51分19秒組織。 apache.coyote.http11.AbstractHttp11Processor過程 INFO:錯誤解析HTTP請求頭 注:HTTP報頭解析錯誤的再次發生將在DEBUG級別被記錄。 java.lang.IllegalArgumentException:在請求目標中找到無效的字符。有效字符在org.apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.java:283) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1017)中的RFC 7230和RFC 3986 中定義) at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:684) at org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1524) at org.apache .tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1480) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source ) at org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskTh read.java:61) 在java.lang.Thread.run(來源不明)

我想問的是有可能解決這個問題不改變的Apache Tomcat版本或更改我的現有代碼。我想知道Apache Tomcat配置文件是否能夠禁用或繞過此檢查?

回答

4

在過去的一天裏,我一直在爲此感慨萬分。我試圖在tomcat中使用mod_rewrite嘗試urlencode'|'一旦進入,但錯誤仍然存​​在,因爲它在它到達重寫引擎之前被拋出。因此在那裏沒有運氣。 ,我發現只有兩個工作的解決方案是:你的Tomcat(Nginx的),它可以用urlencode管沒有拋出一個合理拋出:IllegalArgumentException前

  1. 將代理。
  2. 更改Tomcat版本(並非所有這些版本都使用pipe來引發合理的IllegalArgumentExceptions)。在撰寫本文時,我可以確認最新的8.5.11確實會拋出合理的IllegalArgumentException,但是可以使用8.5.5正常工作。
+0

一個IllegalArgumentException是不崩潰,而是合理的拒絕無效數據。請參閱多米尼克答案。 – Seven

+0

@七:我編輯了回覆,以便像瑞士原子鐘一樣精確。 –

3

自從Tomcat 8.5.8以後,這不再適用。

有一個安全漏洞,在請求URL無效字符。

參見https://bugzilla.redhat.com/show_bug.cgi?id=1397484

編碼管爲%7C

+0

有什麼方法可以過濾uri,以便在tomcat返回400錯誤和'IllegalArgumentException'之前對它進行編碼?當有人在URL中輸入管道字符時,我希望它簡單404而不是400。 – theyuv

相關問題