Springboot项目请求tomcat特殊字符拦截最优解决方案

Posted geyiwei-suzhou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Springboot项目请求tomcat特殊字符拦截最优解决方案相关的知识,希望对你有一定的参考价值。

SpringBoot内嵌tomcat版本大于8.0对请求URL做了严格的过滤, RFC 3986规范定义了Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符(RFC3986中指定了以下字符为保留字符:! * ’ ( ) ; : @ & = + $ , / ? # [ ])**
java.lang.IllegalArgumentException: Invalid character found in the request target.
The valid characters are defined in RFC

网上大多数教程是使用修改tomcat requestTargetAllow参数来绕过过滤。
但是需要添加需要透传的字符集。而且即使修改了tomcat配置之后,搭配Swagger使用还会出现类型转化异常等异常。

java.lang.NumberFormatException: For input string: “”

推荐的做法是对参数进行JSON string化之后,二次encodeURIComponent编码(至于为什么需要二次编码,可以百度一下),后台解析出对应对象。

  • 前端代码
value: encodeURIComponent(encodeURIComponent(JSON.stringify(src, target)))
  • 后端代码(这里ObjectName为需要转化的对象类名)
public void functionName(String value) throws UnsupportedEncodingException 
        value = URLDecoder.decode(URLDecoder.decode(value, "UTF-8"));
        ObjcetName one= JSONObject.parseObject(value, ObjcetName.class);
    

以上是关于Springboot项目请求tomcat特殊字符拦截最优解决方案的主要内容,如果未能解决你的问题,请参考以下文章

解决springboot项目请求出现非法字符问题

springboot2.2.x以上版本GET请求特殊字符处理

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

springboot去掉字符串转义字符

SpringBoot 项目运行在 tomcat7 上

彩蛋推荐 |SpringBoot技术专题「Tomcat技术专区」用正确的姿势如何用外置tomcat配置及运行(Tomcat优化分析)