springboot中URL带有斜杠的转义字符百分之2F导致的400错误

Posted 藤原とうふ店

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot中URL带有斜杠的转义字符百分之2F导致的400错误相关的知识,希望对你有一定的参考价值。

背景:

今天项目上出现一个问题,是前端的GET请求url中带有路径参数,这个参数中有/这个特殊字符,在postman的url中已经转移成了%2F,后端用的是springboot,并没有收到这个请求,直接返回了400的错误

原因:

据说是tomcat默认是不支持转义的,需要手动设置一下转化,这个搜索tomcat的设置可以找到,但是这个是springboot,有内置的tomcat,但是在yml中找不到相关的配置。

解决方法:

修改一下启动类,加一个系统参数,重写WebMvcConfigurerAdapter的configurePathMatch方法.

@SpringBootApplication
public class Application extends WebMvcConfigurerAdapter {

    public static void main(String[] args) throws Exception {
     // step2: System.setProperty(
"org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH", "true"); SpringApplication.run(Application.class, args); }
  // step1: @Override
public void configurePathMatch(PathMatchConfigurer configurer) { UrlPathHelper urlPathHelper = new UrlPathHelper(); urlPathHelper.setUrlDecode(false); configurer.setUrlPathHelper(urlPathHelper); } }

4. 本地tomcat 中该如何设置呢? (本例是修改SpringBoot 内嵌 的 tomcat 配置)

在tomcat目录 /conf/catalina.properties  文件末尾添加下列内容

 org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true 

重启tomcat成功解决问题

5. 其他常用特殊字符的url转义用法如下:

符号 URL中转义结果 转义码
+ URL 中 + 号表示空格 %2B
空格 URL中的空格可以用+号或者编码 %20
/ 分隔目录和子目录 %2F
? 分隔实际的URL和参数 %3F
% 指定特殊字符 %25
# 表示书签 %23
& URL中指定的参数间的分隔符 %26
= URL中指定参数的值 %3D

以上是关于springboot中URL带有斜杠的转义字符百分之2F导致的400错误的主要内容,如果未能解决你的问题,请参考以下文章

url转义

url特殊字符转义及解决方法

python 如何快速转义路径字符串中的斜杠

python input()键盘输入8583报文带有x单反斜杠自动转义问题解决办法

转义反斜杠在javascript中打印两个反斜杠

尝试使用带有反斜杠作为转义字符的Google Bigquery CLI导入CSV时出错