web-dev-qa-db-ja.com

スプリングブートのリクエストターゲットで無効な文字が見つかりました

アプリケーションは、Java -jar with version 1.5.6.RELEASE of spring boot。
リクエストの1つのコンテンツに文字「{」があります。サーバーに送信されると、次の例外が発生します。

Java.lang.IllegalArgumentException:要求ターゲットに無効な文字が見つかりました。有効な文字は、org.Apache.coyote.http11.Http11Processor.service(Http11Processor.Java:683)のorg.Apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.Java:472)のRFC 7230およびRFC 3986で定義されていますorg.Apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.Java:66)org.Apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.Java:868)at org.Apache.Tomcat.util.net.NioEndpoint $ SocketProcessor。 doRun(NioEndpoint.Java:1455)at org.Apache.Tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.Java:49)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 :745)

どこが間違っていますか?どうすれば修正できますか?

EDIT1:
私の残りはこのようなものです:

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

https://Tomcat.Apache.org/Tomcat-8.5-doc/config/systemprops.htmlrequestTargetAllow非推奨です。私にとって、ここで紹介した他のソリューションも機能しませんでした。 Tomcatのドキュメントによると、代わりにプロパティrelaxedQueryCharsを設定する方法を見つけました。

@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

このようにSpringブートアプリを起動します

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

またはこのようにuriをエンコードします

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

このコードをメインクラスに追加するだけの簡単な方法

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

2
Jayendra Singh

Spring Boot 1.5.17.RELEASEの場合。以下のコードは私のために働いた。

@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