アプリケーションは、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);
https://Tomcat.Apache.org/Tomcat-8.5-doc/config/systemprops.html 、requestTargetAllow非推奨です。私にとって、ここで紹介した他のソリューションも機能しませんでした。 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;
}
このように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));
このコードをメインクラスに追加するだけの簡単な方法
System.setProperty("Tomcat.util.http.parser.HttpParser.requestTargetAllow", "{}");
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;
}
}