背景:
今天项目上出现一个问题,是前端的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 |
原文地址:https://www.cnblogs.com/Night-Watch/p/11693257.html
时间: 2024-10-31 19:58:59