解決SpringBootThe 報錯valid characters are defined in RFC 7230 and RFC 3986

這個問題是在日常開發中遇到的,排查發現是前端產品在發送post請求的時候,自動把參數拼接到url後面(有點坑),在包含特殊字符的時候就會導致請求報錯,理論上不允許的特殊字符如下:
在這裏插入圖片描述
項目上線在即,來不及修改前端產品,只能暫時後端兼容。這邊記錄一下解決方案。
針對這個問題,通過查閱資料及實測得到了有以下幾個解決方案,供各位參考:
1.去除url後面的特殊字符(當前應用場景不適合)
2.改成post請求(針對我的情況也不滿足)
3.更換springboot版本,低版本的內置tomcat是沒有對請求頭做嚴格校驗的,但是這樣可能會存在一些其他的風險,不太建議
4.修改HttpParser 源碼(這個方案是在網上搜到的,沒有實踐)

5.將允許的特殊字符添加到啓動類,如下(最終採用的方法)

@Bean
	public ConfigurableServletWebServerFactory webServerFactory() {
		TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
		factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> connector.setProperty("relaxedQueryChars", "|{}[]\\"));
		return factory;
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章