RFC 3986文档规定,Url中只允许包含英文字母(a-z,A-Z)、数字(0-9)、- _ . ~ 4个特殊字符以及所有保留字符。
RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ]
解决方法:
1、修改tomcat配置(代码 or tomcat配置文件)
代码:
/**
* 解决异常信息:
* java.lang.IllegalArgumentException:
* Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
* @return
* TomcatEmbeddedServletContainerFactory 2.0版本以下是这个类
* TomcatServletWebServerFactory 2.0版本以上是这个类
*/
@Bean
public TomcatServletWebServerFactory tomcatEmbeddedServletContainerFactory(){
TomcatServletWebServerFactory tomcatServletWebServerFactory = new TomcatServletWebServerFactory();
tomcatServletWebServerFactory.addConnectorCustomizers((Connector connector) -> {
connector.setProperty("relaxedPathChars","\"{\\}^`{|}[]");
connector.setProperty("relaxedQueryChars","\"{\\}^`{|}[]");
});
return tomcatServletWebServerFactory;
}
配置文件:
…/conf/catalina.properties中,找到最后注释掉的一行 #tomcat.util.http.parser.HttpParser.requestTargetAllow=| ,改成tomcat.util.http.parser.HttpParser.requestTargetAllow=|{},表示把{}放行,自行修改需要放行的字符
2、降低tomcat版本(不建议)
3、url转义,编码encodeURI(url)、解码方法是decodeURI(url)