使用带有 tomcat 版本 9.0.31 的 spring boot 的分段文件上传失败

ANP*_*ANP 7 java tomcat multipart spring-boot

spring boot 应用程序中的多部分文件上传不适用于 tomcat 版本 9.0.31。但是这个功能在旧版本 9.0.30 上工作正常。但是这个版本有一个漏洞,被迫升级版本。请参阅下面给出的错误

 "timestamp": "2020-03-09T08:01:56.169+0000",
"status": 500,
"error": "Internal Server Error",
"message": "Failed to parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.impl.IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly",
Run Code Online (Sandbox Code Playgroud)

错误日志如下

nested exception is org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.impl.IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly] with root causeorg.apache.tomcat.util.http.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly
Run Code Online (Sandbox Code Playgroud)

请帮助解决这个问题。

sne*_*hab 9

我认为该错误已在最新的 tomcat 版本 9.0.33 中得到修复。

在版本 9.0.31 中不起作用的多部分文件上传功能也已通过升级修复。此外,我尝试使用 owasp 依赖项检查器检查是否存在任何漏洞,发现此版本中没有漏洞。

只需使用以下版本升级您的依赖项:

<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-core -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-core</artifactId>
    <version>9.0.33</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)


小智 5

这是 Tomcat 9.0.31 中的一个错误。Apache 的 Bugzilla 中已经有一个条目:https ://bz.apache.org/bugzilla/show_bug.cgi ? id = 64195 。

根据错误报告,为了防止这个问题,你可以 - 使用 Http11Nio2Protocol 而不是 Http11NioProtocol - 使用 Tomcat 9.0.30,这不会发生(但在 Tomcat 的 AJP 协议中有关键的 Ghostcat 漏洞)

该问题将在 9.0.32(尚未发布)中修复。

注意:当使用 http 而不是 https 时,问题也不会出现。