设置url允许的字符串

博主在将旧的Spring项目切换到Spring Boot并更换服务器为Tomcat后,测试时发现报错。错误原因是URL中带有特殊字符。给出了去除特殊字符、使用Post方法、更换低版本Tomcat等解决方法,还针对Spring Boot集成的Tomcat,通过设置RelaxedQueryChars属性解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

May 05, 2019 5:46:06 PM org.apache.coyote.http11.Http11Processor service
INFO: Error parsing HTTP request header
 Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.
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.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:467)
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:294)
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
        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)

 

最近在切换旧的spring项目到springboot,顺便把服务器换成tomcat.

在测试中发现报错,查了一下发现

错误原因:

当在浏览器中访问时 URL中带有特殊字符,如花括号冒号时,就会出现这个错误。

例如:http://local:80/index.do?{id:123}

解决方法:

1、去除URL中的特殊字符;

3、使用 Post 方法提交数据

4、更换低版本的Tomcat来规避这种问题。

5、在 conf/catalina.properties  添加或者修改: 

  5.1  添加  tomcat.util.http.parser.HttpParser.requestTargetAllow=|{} 

5.2  修改tomcat/conf/catalina.properties的配置文件 
Tomcat在 7.0.73, 8.0.39, 8.5.7 版本后,添加了对于http头的验证。 
具体来说,就是添加了些规则去限制HTTP头的规范性 
org.apache.tomcat.util.http.parser.HttpParser#IS_NOT_REQUEST_TARGET[]中定义了一堆not request target 
if(IS_CONTROL[i] || i > 127 || i == 32 || i == 34 || i == 35 || i == 60 || i == 62 || i == 92 || i == 94 || i == 96 || i == 123 || i == 124 || i == 125) { 
IS_NOT_REQUEST_TARGET[i] = true; 

 

但是我们现在设置的是springboot集成的tomcat,没办法去改文件.所以呢

设置属性来解决RelaxedQueryChars属性

 解决问题如下:

/**
 * 解决异常信息:
 *  java.lang.IllegalArgumentException:
 *      Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
 * @return
 */
@Bean
public ConfigurableServletWebServerFactory webServerFactory() {
    TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
    factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
        @Override
        public void customize(Connector connector) {
            connector.setProperty("relaxedQueryChars", "|{}[]");//给所有链接添加这个属性
        }
    });
    return factory;
}       
解决啦~~                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值