webentwicklung-frage-antwort-db.com.de

Ungültiges Zeichen im Anforderungsziel im Frühjahrsstart gefunden

Meine Anwendung wird mit Java -jar mit Version 1.5.6.RELEASE von Spring Boot gestartet.
Der Inhalt einer meiner Anfragen hat das Zeichen "{". Beim Senden an den Server wird die folgende Ausnahme ausgelöst:

Java.lang.IllegalArgumentException: Im Anforderungsziel wurde ein ungültiges Zeichen gefunden. Die gültigen Zeichen sind in RFC 7230 und RFC 3986 unter org.Apache.coyote.http11.Http11InputBuffer.parseRequestLine (Http11InputBuffer.Java:472) unter org.Apache.coyote.http11.Http11Processor.service (Http11.Processor.Http3) definiert org.Apache.coyote.AbstractProcessorLight.process (AbstractProcessorLight.Java:66) bei org.Apache.coyote.AbstractProtocol $ ConnectionHandler.process (AbstractProtocol.Java:868) bei org.Apache.Tomcat.util.net.NioEndpoint $. doRun (NioEndpoint.Java:1455) um org.Apache.Tomcat.util.net.SocketProcessorBase.run (SocketProcessorBase.Java:49) um Java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.Java:1142) um Java.util42 .concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.Java:617) bei org.Apache.Tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.Java:61) bei Java.lang.Thread.run (Thread.Java : 745)

Wo ist falsch Wie behebe ich das?

EDIT1:
Meine Ruhe ist wie folgt:

var jsonData = {
                    id: $("#hiddenId").val(),
                    permitNumber: $("#txtPermitNumber").val(),
                    permitToDate: $("#txtPermitToDate").val()
               }
document.location = restUrl + "/print?reportParams= " + JSON.stringify(jsonData);
18

Laut https://Tomcat.Apache.org/Tomcat-8.5-doc/config/systemprops.html , requestTargetAllow ist veraltet. Auch die anderen hier vorgestellten Lösungen haben für mich nicht funktioniert. Laut der Tomcat-Dokumentation habe ich eine Möglichkeit gefunden, die Eigenschaft relaxedQueryChars zu setzen:

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

so starten Sie Ihre Spring Boot App

$ Java -jar -Dtomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
 demo-0.0.1-SNAPSHOT.jar

oder kodiere uri so

document.location = restUrl + "/print?reportParams= " + encodeURI(JSON.stringify(jsonData));
9

Fügen Sie einfach diesen Code in Ihre Hauptklasse ein

System.setProperty("Tomcat.util.http.parser.HttpParser.requestTargetAllow", "{}");

2
Jayendra Singh

Für Spring Boot 1.5.17.RELEASE. Der folgende Code hat bei mir funktioniert.

@Configuration
public class ServerConfig {

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

}
0
Priya Nalang