zoukankan      html  css  js  c++  java
  • springboot特殊异常Invalid character found in the request target

    前言

    • 小组项目里之前跑的好好的oss文件下载功能突然抛异常了,异常信息:↓
    • Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986 ...
    • 发现出现异常的文件路径都有反斜杠 \,这是使用了 File.separator 文件系统分割符出现的。

    原因

    • SpringBoot 2.0.0 以上都采用内置tomcat8.0以上版本
    • tomcat8.0以上版本遵从RFC规范添加了对Url的特殊字符的限制
    • url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~四个特殊字符以及保留字符(! * ’ ( ) ; : @ & = + $ , / ? # [ ]) 这些字符

    解决

    • 方式1 - 简单url替换
      • 请求发送到后台前替换掉特殊字符
      • 后台拿到后还原
    • 方式2 - 降低Tomcat版本
    • 方式3 - 配置tomcat放开目标字符限制
      • 方式3.1 springboot内置tomcat容器配置
        @SpringBootApplication
        public class XxxApplication {
          public static void main(String[] args) {
          	TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
              SpringApplication.run(XxxApplication.class, args);
          }
          
          @Bean
          public ConfigurableServletWebServerFactory webServerFactory() {
              TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
              factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
                  @Override
                  public void customize(Connector connector) {
                     // 放开某些字符(反斜杠)限制
                     connector.setProperty("relaxedQueryChars", "\\");
                  }
              });
              return factory;
          }                           
        }
        
      • 方式3.2 直接修改外部tomcat的xml配置(适用于没有使用内置容器的系统)

    参考

  • 相关阅读:
    引用类型之Object类
    原始类型之String类型
    原始类型之Boolean类型
    引用类型之Boolean类
    引用类型之instanceof运算符
    javascript类型转换
    运算符之一元运算符
    Google Sites开始向所有人免费开放 可自由建个人主页
    在线制作"篆体印章",很酷!
    MD5 哈希计算工具类
  • 原文地址:https://www.cnblogs.com/noodlerkun/p/15594335.html
Copyright © 2011-2022 走看看