Spring boot 在spring boot中的请求目标中找到无效字符
我的应用程序是用java-jar启动的,版本是SpringBoot的1.5.6.0版。Spring boot 在spring boot中的请求目标中找到无效字符,spring-boot,embedded-tomcat-8,Spring Boot,Embedded Tomcat 8,我的应用程序是用java-jar启动的,版本是SpringBoot的1.5.6.0版。 我的一个请求的内容具有字符“{”。将其发送到服务器时,会引发以下异常: java.lang.IllegalArgumentException:在中找到无效字符 请求目标。有效字符在RFC 7230和RFC中定义 3986 at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:472) 在 or
我的一个请求的内容具有字符“{”。将其发送到服务器时,会引发以下异常: java.lang.IllegalArgumentException:在中找到无效字符 请求目标。有效字符在RFC 7230和RFC中定义 3986 at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:472) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:683) 在 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) 在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 运行(Thread.java:745) 哪里错了? 我怎么修理它 编辑1:
我的休息是这样的:
var jsonData = {
id: $("#hiddenId").val(),
permitNumber: $("#txtPermitNumber").val(),
permitToDate: $("#txtPermitToDate").val()
}
document.location = restUrl + "/print?reportParams= " + JSON.stringify(jsonData);
您将像这样启动Spring boot应用程序
$ java -jar -Dtomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
demo-0.0.1-SNAPSHOT.jar
document.location = restUrl + "/print?reportParams= " + encodeURI(JSON.stringify(jsonData));
或者像这样编码uri
$ java -jar -Dtomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
demo-0.0.1-SNAPSHOT.jar
document.location = restUrl + "/print?reportParams= " + encodeURI(JSON.stringify(jsonData));
简单的方法就是在主类中添加此代码
System.setProperty(“tomcat.util.http.parser.HttpParser.requestTargetAllow”,“{}”);
根据,requestTargetAllow已被弃用。对我来说,此处提供的其他解决方案也不起作用。根据tomcat文档,我找到了一种设置属性relaxedQueryChars的方法:
对于SpringBoot 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;
}
}
在请求端将其编码为Base 64字符串,并在控制器端对其进行解码
编码
btoa(字符串)
解码:
String arr = request.getParameter();
arr = new String(Base64.getDecoder().decode(arr))
对于Spring Boot(2.X)应用程序,只需添加到属性文件:
server.tomcat.relaxed-query-chars=|,{,},[,]
还有以下键:
server.tomcat.released path chars
对于Spring引导应用程序,请在属性文件中包含此键:
server.tomcat.relaxed-query-chars=|,{,},[,]
server.tomcat.additional tld skip patterns=xercesImpl.jar、xml api.jar、serializer.jar、xml api.jar、jaxb core.jar、jaxb api.jardahanetoon服务:DDoS对我不起作用,似乎在Spring Boot 2.x.Does中被忽略(同样)不适用于我,似乎被Spring Boot 2.x忽略。如果用户也给出否决投票的原因,那就更好了。我没有投票给帖子。我怀疑,投票人不起作用,因为他使用Spring Boot 2可能会发生什么。但是别担心,upvote比down强5倍。如果你的解决方案对我有效,我将我会投票表决。在eclipse中我在哪里可以找到这个配置?@Matthias Lohr不确定“find”是什么意思。这是Java Bean的代码。这里没有与eclipse相关的内容。