tomcat 版本在8.0.x左右的时候,tomcat.util.http.parser.HttpParser这个类下有对请求地址中的特殊符号进行处理,这里面预留的是{}| 三个符号,并且是需要先配置在系统变量下面的 “tomcat.util.http.parser.HttpParser.requestTargetAllow” 参数有事先定义放行符号,默认情况下系统变量没有该参数,所以连 |{} 三个符号也无法放行
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 {
@Override
public void customize(TomcatServletWebServerFactory factory) {
factory.addConnectorCustomizers(connector -> connector.setAttribute("relaxedQueryChars","\"<>[\\]^`{|}"));
factory.addConnectorCustomizers(connector -> connector.setAttribute("relaxedPathChars","\"<>[\\]^`{|}"));
}
}