rez*_*tin 19 spring-boot embedded-tomcat-8
我的应用程序是从java -jar开始的,版本为1.5.6.RELEASE的spring boot.
我的一个请求的内容具有字符"{".当它被发送到服务器时,引发以下异常:
java.lang.IllegalArgumentException:在请求目标中找到无效字符.有效字符在RFC 7230和RFC 3986中的org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:472)中定义,位于org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:683)at at 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)位于java.util的java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)的org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) .concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)atg.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);
Run Code Online (Sandbox Code Playgroud)
Mat*_*ohr 22
根据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;
}
Run Code Online (Sandbox Code Playgroud)
你会像这样启动你的Spring启动应用程序
$ java -jar -Dtomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
demo-0.0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
或者像这样编码uri
document.location = restUrl + "/print?reportParams= " + encodeURI(JSON.stringify(jsonData));
Run Code Online (Sandbox Code Playgroud)
对于 Spring Boot (2.X) 应用程序,只需添加到属性文件:
server.tomcat.relaxed-query-chars=|,{,},[,]
Run Code Online (Sandbox Code Playgroud)
还有以下键: server.tomcat.relaxed-path-chars
如果您使用 application.yaml 只需添加以下配置
server:
tomcat:
relaxed-query-chars: '|,{,},[,]'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14121 次 |
| 最近记录: |