java url特殊字符報400


項目用的spring +spring mvc + mybatis框架,關於統一錯誤頁面在開發的過程中就做過編碼,並且一直都很有效,像500,404,403等常規錯誤碼都能得到有效處理,

但是400卻不行,而且還暴露tomcat的版本信息,這是很嚴重的安全漏洞.

嘗試各種方式都不行,后來終於發現是tomcat的版本問題,好像是tomcat7.9以上的版本,都不支持請求鏈接上帶有特殊字符.否則會報400錯誤,

tomcat請求中包含特殊字符 [] | {} 發送get請求失敗:

原因:

這是因為Tomcat嚴格按照 RFC 3986規范進行訪問解析,而 RFC 3986規范定義了Url中只允許包含英文字母(a-zA-Z)、數字(0-9)、-_.~4個特殊字符以及所有保留字符(RFC3986中指定了以下字符為保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。傳入的參數中有"{"不在RFC3986中的保留字段中,所以會報這個錯。

400錯誤的解決方式:

方法一 : 降低tomcat的版本

方法二:  修改server.xml

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" relaxedQueryChars="[]|{}^&#x5c;&#x60;&quot;&lt;&gt;" redirectPort="8443" />


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM