問題表象
開發(fā),測試環(huán)境運行正常的接口到現(xiàn)場報錯,報錯日志關(guān)鍵信息如下:java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986。
問題分析及原因
由于代碼在開發(fā)測試環(huán)境測試通過,判斷大概率是現(xiàn)場特殊數(shù)據(jù)導(dǎo)致問題。查資料得知,如果Get請求的參數(shù)包含了特殊字符會引起上文中的報錯。向現(xiàn)場確認,查看請求數(shù)據(jù),發(fā)現(xiàn)參數(shù)中存在“[]”特殊字符。
出于網(wǎng)絡(luò)安全考慮,Web容器默認是不允許Url中存在特殊字符的,對應(yīng)的字符標準是RFC7230和RFC3986,一旦Url中出現(xiàn)了不符合標準的字符就會報這個異常。
解決方案
方案1:(采用的方案)
修改配置,項目用的是spring-boot內(nèi)置的tomcat,增加spring配置
server.tomcat.relaxed-query-chars=<,>,[,\,\,],^,`,{,|,}
這個參數(shù)控制的是普通參數(shù)如果使用路徑參數(shù)需要增加如下配置
server.tomcat.relaxed-path-chars=<,>,[,\,\,],^,`,{,|,}
方案2:
將Get請求改成Post請求。文章來源:http://www.zghlxwxcb.cn/news/detail-757485.html
方案3:
修改出錯的接口,前端對參數(shù)進行編碼,屏蔽特殊字符,后端解碼。文章來源地址http://www.zghlxwxcb.cn/news/detail-757485.html
到了這里,關(guān)于報錯:java.lang.IllegalArgumentException的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!