Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 在spring boot中的请求目标中找到无效字符_Spring Boot_Embedded Tomcat 8 - Fatal编程技术网

Spring boot 在spring boot中的请求目标中找到无效字符

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-jar启动的,版本是SpringBoot的1.5.6.0版。
我的一个请求的内容具有字符“{”。将其发送到服务器时,会引发以下异常:

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.jar

dahanetoon服务:DDoS对我不起作用,似乎在Spring Boot 2.x.Does中被忽略(同样)不适用于我,似乎被Spring Boot 2.x忽略。如果用户也给出否决投票的原因,那就更好了。我没有投票给帖子。我怀疑,投票人不起作用,因为他使用Spring Boot 2可能会发生什么。但是别担心,upvote比down强5倍。如果你的解决方案对我有效,我将我会投票表决。在eclipse中我在哪里可以找到这个配置?@Matthias Lohr不确定“find”是什么意思。这是Java Bean的代码。这里没有与eclipse相关的内容。