SpringBoot内置Tomcat报错RFC7230 and RFC3986终极方案(修改Http11Processor源码)

SpringBoot内置Tomcat报错RFC7230 and RFC3986终极方案(修改源码)

原因

tomcat 版本在8.0.x左右的时候,tomcat.util.http.parser.HttpParser这个类下有对请求地址中的特殊符号进行处理,这里面预留的是{}| 三个符号,并且是需要先配置在系统变量下面的 “tomcat.util.http.parser.HttpParser.requestTargetAllow” 参数有事先定义放行符号,默认情况下系统变量没有该参数,所以连 |{} 三个符号也无法放行

报错分三个原因

  1. 参数中含特殊字符
  2. 路径中含特殊字符
  3. header中含特殊字符

解决方法

对所有数据进行编码处理

修改源码

1、在项目里建包(org.apache.coyote.http11)
2、复制Http11Processor类到包下
3、修改代码 构造HttpParser对象的两个参数将特殊字符加进去,Http11InputBuffer对象第三个参数设置为false即可
在这里插入图片描述

package com.zht.config;

import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.stereotype.Component;

@Component
public class TomcatWebServerCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        factory.addConnectorCustomizers(connector -> connector.setAttribute("relaxedQueryChars","\"<>[\\]^`{|}"));
        factory.addConnectorCustomizers(connector -> connector.setAttribute("relaxedPathChars","\"<>[\\]^`{|}"));
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值