zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    C# 获得word中某一段落所在页的页码
    写一个安全的Java单例
    递归算法
    redis连接池连接失败的问题
    A query was run and no Result Maps were found for the Mapped Statement .....................
    解决maven默认JDK1.5报错
    mybatis控制台不报错数据库却没有值返回的问题
    LNMP 环境更换Nginx 服务器为Tengine
    简易的phpexcel导出柱状图
    Laravel学习基础篇之--路由
  • 原文地址:https://www.cnblogs.com/Night-Watch/p/11693257.html
Copyright © 2011-2022 走看看