天天看点

SpringBoot内置tomcat,不支持URL中存在特殊字符问题解决

转载自以下博客

原博链接:

https://blog.csdn.net/baidu_37313657/article/details/107560020.

本人作出轻微修改

问题

访问SpringBoot项目,URL为

http://192.168.31.228:10020/login?phone=86|18233334444&msg=123456

项目报错。信息如下:

解决

发现是Tomcat版本问题,原因高版本加了对请求头字符的限制。

增加对Tomcat配置即可,代码如下

package com.cn.config;

import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 解决高版本Tomcat不支持在URL中传入特殊字符(比如|)的问题
 */
@Configuration
public class TomcatServerConfig {
    @Bean
    public ConfigurableServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
            @Override
            public void customize(Connector connector) {
                //允许特殊字符
                connector.setProperty("relaxedQueryChars", "|{}[]");
            }
        });
        return factory;
    }
}
           

继续阅读