首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何让Tomcat接受URL中未转义的括号?

如何让Tomcat接受URL中未转义的括号?
EN

Stack Overflow用户
提问于 2017-05-17 05:21:09
回答 4查看 14.2K关注 0票数 10

我以前从未使用过Tomcat,但我最近继承了一个JSP项目,现在我需要让它运行起来。我已经设法在Eclipse中本地安装了Tomcat8.0,一切工作正常。我还在Ubuntu VPS上安装了Tomcat8.0。这个应用程序运行得很好,除了它如何处理URL的一个小问题。

客户端应用程序生成参数中带有未转义方括号和花括号的URL,如下所示:

代码语言:javascript
复制
GET /saveItems.json?items=[{%22json%22:%22here%22}]

尽管我很想更改客户端应用程序,但我不能。我只需要让这个后端运行起来。

我的本地应用程序副本可以很好地处理这个问题。然而,在服务器上,我得到了这个错误:

代码语言:javascript
复制
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    at org.apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.java:286)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1504)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1460)
    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:748)

我一直在寻找一个可能会影响这一点的设置,但没有任何运气。这里我漏掉了什么?

EN

回答 4

Stack Overflow用户

发布于 2018-05-29 22:41:46

我通过编辑$CATALINA_HOME\conf\server.xml来实现这一点

旧值: <Connector ... protocol="HTTP/1.1"... />

新值: <Connector ... protocol="HTTP/1.1"... relaxedQueryChars='[]|{}^&#x5c;&#x60;&quot;&lt;&gt;' />

票数 15
EN

Stack Overflow用户

发布于 2017-05-17 22:07:10

Tomcat 8.0.39/8.5.9/7.0.73将对有效字符的额外检查添加到HTTP请求行解析。根据this requirement的说法,version 8.0.42/8.5.12/7.0.76做了一些更改以允许一些无效字符。

如果字符出现在系统属性tomcat.util.http.parser.HttpParser.requestTargetAllow的值中,则允许使用{}|

您可以添加系统属性tomcat.util.http.parser.HttpParser.requestTargetAllow={}以防止此错误。其中一个解决方案是编辑$CATALINA_HOME\conf\catalina.properties

票数 8
EN

Stack Overflow用户

发布于 2019-06-01 22:09:29

我也遇到了类似的问题,但使用Spring boot时,下面的解决方案解决了我的问题:

代码语言:javascript
复制
@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 - https://stackoverflow.com/questions/46251131/invalid-character-found-in-the-request-target-in-spring-boot

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44011774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档