Springboot项目请求tomcat特殊字符拦截最优解决方案 The valid characters are defined in RFC

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);
    }

你可能感兴趣的:(Tomcat,Java,SpringBoot)