SpringBoot项目url请求中带有特殊符号{}|返回400的问题

原因:springboot内置tomcat版本严格按照 RFC 3986规范进行访问解析,而 RFC 3986规范规定的Url中不包含{}|
解决方案:有两种方法解决
方法一:添加配置类,代码如下(本人亲测有效

package com.welb.config;

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;

/**
 1. @author cq
 2. @title: TomcatConfig
 3. @projectName springBootDemo
 4. @description: tomcat特殊字符处理问题
 5. @date 2020/5/5 21:06
 */
@Configuration
public class TomcatConfig {
    @Bean
    public ConfigurableServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers((TomcatConnectorCustomizer) connector -> {
            //允许的特殊字符
            connector.setProperty("relaxedQueryChars", "|{}[]");
        });
        return factory;
    }
}

方法二:更改springboot内置的Tomcat版本(未测试,如果您尝试,请在评论区发表您的结果,以供大家学习
步骤1. 查看使用的org.springframework.boot版本
SpringBoot项目url请求中带有特殊符号{}|返回400的问题_第1张图片如图所示,我的版本为2.2.6

打开本地maven repository目录下的spring-boot-dependencies文件:
D:\repository\org\springframework\boot\spring-boot-dependencies\2.2.6.RELEASE\spring-boot-dependencies-2.2.6.RELEASE.pom
SpringBoot项目url请求中带有特殊符号{}|返回400的问题_第2张图片
可以在标签下面找到8.5.20
SpringBoot项目url请求中带有特殊符号{}|返回400的问题_第3张图片
推测!!!修改此处tomcat版本恢复到低版本,例如:8.0.32版本即可修改URL传特殊字符问题,方法一本人亲测有效,方法二未测试。
————————————————
版权声明:本文为CSDN博主「johnny233」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lonelymanontheway/article/details/79562512

你可能感兴趣的:(SpringBoot,spring,boot,tomcat,java,url)