背景:
tomcat8.5.55等版本对特殊字符进行请求拦截,导致直接报错。间接暴露tomcat版本号,造成安全问题,及可能导致正常json参数被拦截
解决方案:
一、非springboot项目:
修改tomcat配置文件/config/server.xml中的relaxedQueryChars属性,设置不予拦截的特殊字符,详见下图。
<Connector port="8100" protocol="HTTP/1.1"
relaxedQueryChars="[]|{}^\`"<> @ ·"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
二、springboot项目
添加配置类,对集成的tomcat进行参数修改
package com.springbootdemo.util;
import org.apache.catalina.connector.Connector;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Configuration;
/**
* 配置Spring boot支持在查询参数中加[]|{}^\`"<>字符。
* @author
* @version
*/
@Configuration
public class SystemConfig {
public EmbeddedServletContainerFactory webServerFactory() {
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
connector.setProperty("relaxedQueryChars", "[]|{}^\`"<>");
}
});
return factory;
}
}
附:html实体符号编码:https://www.w3school.com.cn/tags/html_ref_entities.html
扫描二维码关注公众号,回复:
13144110 查看本文章
