在 Spring Boot 的请求目标中发现无效字符

新手上路,请多包涵

我的应用程序以 java -jar 启动,版本为 1.5.6.RELEASE 的 spring boot。

我的一个请求的内容具有字符“{”。当它被发送到服务器时,会引发以下异常:

java.lang.IllegalArgumentException:在请求目标中发现无效字符。有效字符在 org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:472) 处 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:683) 处的 RFC 7230 和 RFC 3986 中定义org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 在 org.apache.coyote.AbstractProtocol\(ConnectionHandler.process(AbstractProtocol.java:868) 在 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)

哪里错了?我如何解决它?

编辑1:

我的休息是这样的:

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

原文由 reza ramezani matin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 810
2 个回答

根据 https://tomcat.apache.org/tomcat-8.5-doc/config/systemprops.htmlrequestTargetAllow 已被弃用。对我来说,这里介绍的其他解决方案也不起作用。根据 Tomcat 文档,我找到了一种设置属性 relaxQueryChars 的方法:

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

原文由 Matthias Lohr 发布,翻译遵循 CC BY-SA 4.0 许可协议

您将像这样启动您的 Spring Boot 应用程序

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

或像这样编码uri

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

原文由 ali akbar azizkhani 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进