wake-up-neo.com

Wie kann ich Tomcat veranlassen, nicht eingeschlossene Klammern in URLs zu akzeptieren?

Ich habe Tomcat noch nie benutzt, aber ich habe kürzlich ein JSP-Projekt geerbt und jetzt muss ich es zum Laufen bringen. Ich habe es geschafft, Tomcat 8.0 lokal in Eclipse zu installieren und alles funktioniert einwandfrei. Ich habe auch Tomcat 8.0 auf einem Ubuntu VPS installiert. Die App läuft einwandfrei, bis auf ein kleines Problem beim Umgang mit URLs.

Die clientseitige Anwendung erstellt URLs mit nicht gekapselten eckigen und geschweiften Klammern in Parametern wie folgt:

GET /saveItems.json?items=[{%22json%22:%22here%22}]

So sehr ich die clientseitige App ändern möchte, kann ich nicht. Ich muss nur dieses Backend zum Laufen bringen.

Meine lokale Kopie der Anwendung übernimmt diese Aufgabe. Auf dem Server erhalte ich jedoch diesen Fehler:

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.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.Java:286)
    at org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1009)
    at org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:672)
    at org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.Java:1504)
    at org.Apache.Tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.Java:1460)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
    at org.Apache.Tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.Java:61)
    at Java.lang.Thread.run(Thread.Java:748)

Ich habe nach einer Einstellung gesucht, die dies ohne Glück beeinflussen könnte. Was vermisse ich hier?

6
cbnz

Ich mache das machbar, indem ich $ CATALINA_HOME\conf\server.xml editiere

Alter Wert: <Connector ... protocol="HTTP/1.1"... />

Neuer Wert: <Connector ... protocol="HTTP/1.1"... relaxedQueryChars='[]|{}^&#x5c;&#x60;&quot;&lt;&gt;' />

6
Latif

Tomcat 8.0.39/8.5.9/7.0.73 fügt der HTTP-Anforderungszeilenanalyse zusätzliche Prüfungen auf gültige Zeichen hinzu. Entsprechend dieser Anforderung , version 8.0.42/8.5.12/7.0.76 nimmt einige Änderungen vor, um einige ungültige Zeichen zuzulassen.
{, } und | sind zulässig, wenn das Zeichen im Wert der Systemeigenschaft Tomcat.util.http.parser.HttpParser.requestTargetAllow vorhanden ist.

Sie können die Systemeigenschaft Tomcat.util.http.parser.HttpParser.requestTargetAllow={} hinzufügen, um diesen Fehler zu vermeiden. Eine der Lösungen bearbeitet $CATALINA_HOME\conf\catalina.properties

5
Beck Yang

Ich erhalte diese Fehlermeldung, wenn ich versuche, mit einem Sonderzeichen zu GET URLen.

Java.lang.IllegalArgumentException: Ungültiges Zeichen im Anforderungsziel Gefunden.

Durch Ändern des Konnektor-Parameters in server.xml, Können wir ein Sonderzeichen in Tomcat Version 9 analysieren.

Connector port="80" protocol="HTTP/1.1" relaxedQueryChars="\ { } |" 
2
pravin patil

Ich hatte ein ähnliches Problem, aber auch mit Spring Boot konnte das Problem durch die folgende Lösung behoben werden:

@Bean
public ConfigurableServletWebServerFactory webServerFactory() {
    TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
    factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
        @Override
        public void customize(Connector connector) {
            connector.setProperty("relaxedQueryChars", "|{}[]");
        }
    });
return factory;
}

Gutgeschrieben an Matthias-lohr - https://stackoverflow.com/questions/46251131/invalid-character-found-in-the-request-target-in-spring-boot =

0
Leroy