最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot內(nèi)嵌tomcat處理有特殊字符轉(zhuǎn)義的問(wèn)題

 更新時(shí)間:2023年06月26日 09:18:59   作者:蘇暮沉觴  
這篇文章主要介紹了SpringBoot內(nèi)嵌tomcat處理有特殊字符轉(zhuǎn)義的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

SpringBoot內(nèi)嵌tomcat處理有特殊字符轉(zhuǎn)義

前段時(shí)間在發(fā)生了前端調(diào)后臺(tái)接口失敗,原因是url中存在特殊字符,SpringBoot自帶的tomcat無(wú)法正常解析,返回400 bad Request。

網(wǎng)上搜了一下,發(fā)現(xiàn)是因?yàn)閠omcat高版本中,更加嚴(yán)格按照 RFC 3986規(guī)范進(jìn)行訪問(wèn)解析,而 RFC 3986規(guī)范規(guī)定Url中只允許包含英文字母(a-zA-Z)、數(shù)字(0-9)、-_.~4個(gè)特殊字符以及所有保留字符(RFC3986中指定了以下字符為保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])。。

在這里記錄一下解決過(guò)程。

SpringBoot版本為 2.2.5release(不同版本的解決方式可能不同)。

實(shí)際解決方式(針對(duì)于使用SpringBoot內(nèi)置的Tomcat)

添加下面的配置Bean。

? ? /**
? ? ?* 配置轉(zhuǎn)義字符,解決當(dāng)請(qǐng)求路徑中特殊字符,高版本tomcat解析失敗的問(wèn)題
? ? ?*/
? ? @Bean
? ? public ServletWebServerFactory webServerFactory() {
? ? ? ? TomcatServletWebServerFactory fa = new TomcatServletWebServerFactory();
? ? ? ? fa.addConnectorCustomizers(connector -> {
? ? ? ? ? ? connector.setProperty("relaxedQueryChars", "(),/:;<=>?@[\\]{}");
? ? ? ? ? ? connector.setProperty("rejectIllegalHeader", "false");
? ? ? ? });
? ? ? ? return fa;
? ? }

(該內(nèi)容只是用于記錄,具體是否有效沒(méi)有測(cè)試過(guò))如果你不是使用SpringBoot的tomcat啟動(dòng)項(xiàng)目,那你就需要在tomcat的配置文件中添加以下配置信息,并重新啟動(dòng)。

org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

Springboot2中修改tomcat參數(shù)支持請(qǐng)求特殊符號(hào)

解決:java.lang.IllegalArgumentException: Invalid character found in ...

使用Springboot2中內(nèi)置的tomcat啟動(dòng)項(xiàng)目時(shí)候,前端發(fā)來(lái)的請(qǐng)求報(bào)錯(cuò):

java.lang.IllegalArgumentException: Invalid character found in the request target. 
The valid characters are defined in RFC 7230 and RFC 3986     
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:488) ~[tomcat-embed-core-9.0.33.jar:9.0.33]     
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:260) ~[tomcat-embed-core-9.0.33.jar:9.0.33]     
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.33.jar:9.0.33]     
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) [tomcat-embed-core-9.0.33.jar:9.0.33]     
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1594) [tomcat-embed-core-9.0.33.jar:9.0.33]     
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.33.jar:9.0.33]     
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_144]     
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_144]     
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.33.jar:9.0.33]     
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_144]

這段報(bào)錯(cuò)的意思是:請(qǐng)求中含有無(wú)效字符,有效的字符在RFC 7230和RFC 3986中定義

出現(xiàn)這個(gè)錯(cuò)誤的原因是:我們?cè)谇昂笈_(tái)交互的時(shí)候請(qǐng)求的參數(shù),其中含有“{}”“[]”這些特殊符號(hào),在高版本的tomcat中含有這些字符的請(qǐng)求會(huì)被攔截。

例如:http://localhost:8080/sendMail?content=[1007]...

解決方法

springboot項(xiàng)目中增加一個(gè)配置,將webServerFactory方法加入到springboot啟動(dòng)類中,配置文件代碼如下:

import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TomcatConfig {
? ? @Bean
? ? public TomcatServletWebServerFactory webServerFactory() {
? ? ? ? TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
? ? ? ? factory.addConnectorCustomizers((Connector connector) -> {
? ? ? ? ? ? connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");
? ? ? ? ? ? connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");
? ? ? ? });
? ? ? ? return factory;
? ? }
}

這樣就解決問(wèn)題啦!

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實(shí)現(xiàn)序列化與反序列化的簡(jiǎn)單示例

    Java實(shí)現(xiàn)序列化與反序列化的簡(jiǎn)單示例

    序列化與反序列化是指Java對(duì)象與字節(jié)序列的相互轉(zhuǎn)換,一般在保存或傳輸字節(jié)序列的時(shí)候會(huì)用到,下面有兩個(gè)Java實(shí)現(xiàn)序列化與反序列化的簡(jiǎn)單示例,不過(guò)還是先來(lái)看看序列和反序列化的具體概念:
    2016-05-05
  • Springboot通過(guò)谷歌Kaptcha?組件生成圖形驗(yàn)證碼功能

    Springboot通過(guò)谷歌Kaptcha?組件生成圖形驗(yàn)證碼功能

    Kaptcha是谷歌開(kāi)源的一款簡(jiǎn)單實(shí)用的圖形驗(yàn)證碼組件。我個(gè)人推薦它的最大原因是容易上手,采用約定大于配置的方式,快速契合到項(xiàng)目中,這篇文章主要介紹了Springboot通過(guò)谷歌Kaptcha組件生成圖形驗(yàn)證碼的方法,需要的朋友可以參考下
    2023-05-05
  • Java大批量導(dǎo)出Excel數(shù)據(jù)的優(yōu)化過(guò)程

    Java大批量導(dǎo)出Excel數(shù)據(jù)的優(yōu)化過(guò)程

    幾十萬(wàn)上百萬(wàn)行的數(shù)據(jù)是很常見(jiàn)的。本文主要介紹了Java大批量導(dǎo)出Excel數(shù)據(jù)的優(yōu)化過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • SpringBoot使用Validator進(jìn)行參數(shù)校驗(yàn)實(shí)戰(zhàn)教程(自定義校驗(yàn),分組校驗(yàn))

    SpringBoot使用Validator進(jìn)行參數(shù)校驗(yàn)實(shí)戰(zhàn)教程(自定義校驗(yàn),分組校驗(yàn))

    這篇文章主要介紹了SpringBoot使用Validator進(jìn)行參數(shù)校驗(yàn)(自定義校驗(yàn),分組校驗(yàn))的實(shí)戰(zhàn)教程,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-07-07
  • java模式匹配之蠻力匹配

    java模式匹配之蠻力匹配

    這篇文章主要介紹了java模式匹配之蠻力匹配的相關(guān)資料和代碼,需要的朋友可以參考下
    2015-05-05
  • Java使用正則表達(dá)式驗(yàn)證用戶名和密碼的方法

    Java使用正則表達(dá)式驗(yàn)證用戶名和密碼的方法

    這篇文章主要介紹了Java使用正則表達(dá)式驗(yàn)證用戶名和密碼的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 如何從Java接口的角度切入靜態(tài)工廠模式

    如何從Java接口的角度切入靜態(tài)工廠模式

    靜態(tài)工廠模式是一種改進(jìn)的獲取實(shí)例的方法。通常我們會(huì)使用new關(guān)鍵字調(diào)用類的構(gòu)造方法來(lái)創(chuàng)建一個(gè)對(duì)象。靜態(tài)工廠可以根據(jù)用戶傳入的參數(shù)來(lái)動(dòng)態(tài)地實(shí)例化對(duì)象,避免一次性實(shí)例化所有對(duì)象所帶來(lái)的性能浪費(fèi),同時(shí)也降低了耦合性。
    2021-06-06
  • java迭代器移除元素出現(xiàn)并發(fā)修改異常的原因及解決

    java迭代器移除元素出現(xiàn)并發(fā)修改異常的原因及解決

    這篇文章主要介紹了java迭代器移除元素出現(xiàn)并發(fā)修改異常的原因及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Java實(shí)現(xiàn)將彩色PDF轉(zhuǎn)為灰度PDF的示例代碼

    Java實(shí)現(xiàn)將彩色PDF轉(zhuǎn)為灰度PDF的示例代碼

    本文以Java代碼為例介紹如何實(shí)現(xiàn)將彩色PDF文件轉(zhuǎn)為灰度(黑白)的PDF文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧
    2022-03-03
  • SpringCloud Alibaba項(xiàng)目實(shí)戰(zhàn)之nacos-server服務(wù)搭建過(guò)程

    SpringCloud Alibaba項(xiàng)目實(shí)戰(zhàn)之nacos-server服務(wù)搭建過(guò)程

    Nacos 是阿里巴巴推出來(lái)的一個(gè)新開(kāi)源項(xiàng)目,這是一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)。本章節(jié)重點(diǎn)給大家介紹SpringCloud Alibaba項(xiàng)目實(shí)戰(zhàn)之nacos-server服務(wù)搭建過(guò)程,感興趣的朋友一起看看吧
    2021-06-06

最新評(píng)論

肥西县| 东安县| 平顶山市| 定安县| 台安县| 昌平区| 黔江区| 湘潭县| 绥滨县| 明水县| 汉寿县| 耿马| 盐边县| 门头沟区| 密山市| 襄樊市| 亳州市| 宁国市| 柘荣县| 永顺县| 滁州市| 宁波市| 景德镇市| 平邑县| 永昌县| 津南区| 洪湖市| 内乡县| 乌海市| 洱源县| 奇台县| 乌鲁木齐县| 莒南县| 永新县| 巧家县| 增城市| 常山县| 宣威市| 达尔| 慈利县| 霍邱县|