Während des Projektentwicklungsprozesses werden kürzlich aufgrund der Vielfalt der an die Datenbank übertragenen Daten spezielle Symbole in der ID angezeigt, z. B.: , das Symbole enthält, und {D27E2B76B6D84143AB0F3049570A4F38}
die {}
Anforderungsadresse ist http://localhost:8050/api/task/detail?id={D27E2B76B6D84143AB0F3049570A4F38}
400. Auf der Ergebnisseite wird ein Fehler gemeldet und im Hintergrund wird die folgende Fehlermeldung angezeigt:
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:468) ~[tomcat-embed-core-9.0.30.jar:9.0.30]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:260) ~[tomcat-embed-core-9.0.30.jar:9.0.30]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.30.jar:9.0.30]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) [tomcat-embed-core-9.0.30.jar:9.0.30]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1598) [tomcat-embed-core-9.0.30.jar:9.0.30]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.30.jar:9.0.30]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_202]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_202]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.30.jar:9.0.30]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_202]
Der Grund für diesen Fehler ist: Wenn wir interagieren, enthalten die in der URL übergebenen Parameter {}
[]
:
spezielle Symbole wie d, und Anfragen, die diese Symbole in höheren Versionen von Tomcat enthalten, werden abgefangen.
Überprüfen Sie relevante Informationen im Internet, es gibt viele aufgezeichnete Lösungen:
1. Reduzieren Sie die Version von Tomcat.
2. Entfernen Sie Sonderzeichen in der URL.
3. Verwenden Sie POST zum Senden.
4. Ändern Sie die Datei conf/catalina.properties und starten Sie den Dienst neu
五.springboot工程中增加一个tomcat 配置,或者将webServerFactory方法加入到springboot启动类
. Dies trifft jedoch nicht auf mich zu. Der Grund ist folgender:
Methode 1: Mehrere Projekte wurden in der formalen Umgebung ausgeführt. Eine Verringerung der Version kann dazu führen, dass andere Komponenten nicht kompatibel sind. Methode 2: Alle Daten im Projekt werden von Dritten übertragen, und ihre Daten können nicht geändert werden. Letztendlich die schnellste und effektivste Eine Lösung besteht darin, die webServerFactory-Methode zur Springboot-Startklasse hinzuzufügen. Der
Konfigurationscode
lautet wie folgt GET
:方法五
import org.apache.catalina.connector.Connector;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
SpringApplication.run(MainApplication.class, args);
}
//将webServerFactory方法加入到springboot启动类
@Bean
public TomcatServletWebServerFactory webServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers((Connector connector) -> {
connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");
connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");
});
return factory;
}
}
Die zu verarbeitenden Sonderzeichen werden oben hinzugefügt, damit die Zugriffsschnittstelle keinen Fehler meldet.