Tomcat8及之后版本出現的The valid characters are defined in RFC 7230 and RFC 3986


升級tomcat8及更高版本帶來的問題

由於使用get請求,鏈接中參數攜帶特殊字符,由於Tomcat的新版本中增加了一個新特性,就是嚴格按照 RFC 3986規范進行訪問

解析,而 RFC 3986規范定義了Url中只允許包含英文字母(a-zA-Z)、數字(0-9)、-_.~4個特殊字符以及所有保留字符

(RFC3986中指定了以下字符為保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])

1.統一的解決辦法使用encodeURIComponent(對請求參數編碼)

使用encodeURIComponent會對參數所以參數都編碼,這里不建議使用encodeURI,因為它不會對“; / ? : @ & = + $ , #”幾個

特殊字符編碼。

比如請求參數是:"{"criteria":{"matchMode":"AND","subCriteriaList":[{"fieldName":"oilNo","targetValue":"1","compareMode":"EQ"}]}}"

代碼如下:

encodeURIComponent(JSON.stringify((new Query().buildQueryCrit('oilNo', formData.oilNo, 'EQ').queryCrit)));
  
  
 
 
         

編碼后:

"%7B%22criteria%22%3A%7B%22matchMode%22%3A%22AND%22%2C%22subCriteriaList%22%3A%5B%7B%22fieldName%22%3A%22oilNo%22%2C%22targetValue%22%3A%221%22%2C%22compareMode%22%3A%22EQ%22%7D%5D%7D%7D"

在springMVC的Controlelr層能正確接收字符串。


備注另一個問題的解決方法:Linux tomcat8,JDK8 啟動卡住半天 后才能正常啟動解決方案

將$JAVA_HOME/jre/lib/security/java.security內,將securerandom.source的內容改為file:/dev/./urandom即可

linux或者部分unix系統提供隨機數設備是/dev/random 和/dev/urandom ,兩個有區別,urandom安全性沒有random高,但random需要時間間隔生成隨機數。

可能在生成隨機數的時候卡住了,導致tomcat啟動不了








免責聲明!

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



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