【tomcat】tomcat8.5.55特殊字符被拦截处理

背景:

tomcat8.5.55等版本对特殊字符进行请求拦截,导致直接报错。间接暴露tomcat版本号,造成安全问题,及可能导致正常json参数被拦截

解决方案:

一、非springboot项目:

修改tomcat配置文件/config/server.xml中的relaxedQueryChars属性,设置不予拦截的特殊字符,详见下图。

        <Connector port="8100" protocol="HTTP/1.1"
               relaxedQueryChars="[]|{}^&#x5c;&#x60;&quot;&lt;&gt;&#160;&#64;&#32;&#183;"
               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支持在查询参数中加[]|{}^&#x5c;&#x60;&quot;&lt;&gt;字符。
 * @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", "[]|{}^&#x5c;&#x60;&quot;&lt;&gt;");
            }
        });
        
        return factory;
    }
}

附:html实体符号编码:https://www.w3school.com.cn/tags/html_ref_entities.html

猜你喜欢

转载自blog.csdn.net/xiaren_1988/article/details/109387385