今天项目启动后,通过页面用get请求后台接口,发现如下报错信息
排查到前端在参数中传了一段json,参数中包含“{}“[]””,而"{"不在RFC3986中的保留字段中,被非法的。这时候请求压根到不了你的方法就被tomcat拦截了。直接报:
查资料说是tomcat 8.0以后对请求URL做了严格的过滤,查看自己的springboot版本是
2.3.12.RELEASE,里面自带tomcat版本是<tomcat.version>9.0.46</tomcat.version>,
最后通过在项目里加一个tomcat配置文件解决了,代码如下
import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Description tomcat配置
* @Date 2023/4/20 14:32
*/
@Configuration
public class TomcatConfig {
@Bean
public TomcatServletWebServerFactory webServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers((Connector connector) -> {
connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");
connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");
});
return factory;
}
}