Java 是否可以在收到请求正文之前拦截请求

Java 是否可以在收到请求正文之前拦截请求,java,tomcat,Java,Tomcat,最初的问题是:在Tomcat级别限制多部分文件上传大小,例如10mb 我当前的解决方案(基于Spring Boot的StandardMultipartHttpServletRequest)首先在内部检查内容长度请求头。到目前为止听起来不错 但我看到,对于大型文件,在执行此检查之前,甚至在任何servlet过滤器逻辑之前,都会出现明显的延迟(与文件大小相对应)。事实上,我在org.apache.tomcat.util.net.NioEndpoint之前(或内部的某个地方)得到了这个延迟,这是sta

最初的问题是:在Tomcat级别限制多部分文件上传大小,例如
10mb

我当前的解决方案(基于Spring Boot的
StandardMultipartHttpServletRequest
)首先在内部检查
内容长度
请求头。到目前为止听起来不错

但我看到,对于大型文件,在执行此检查之前,甚至在任何servlet过滤器逻辑之前,都会出现明显的延迟(与文件大小相对应)。事实上,我在
org.apache.tomcat.util.net.NioEndpoint
之前(或内部的某个地方)得到了这个延迟,这是stacktrace中的第二个调用(第一个是
线程

看起来tomcat在应用任何应用程序逻辑之前都会在底层加载完整的请求主体

相比之下,当我在Nginx中将Tomcat包装为反向代理并在Nginx中限制文件大小(这也只检查头)时,它会立即中断上传


问题是:在请求主体上传完成之前,在Tomcat中执行任何逻辑在技术上是否可行?特别是,对于限制文件大小?

设置tomcat上载大小的步骤:

一,。转到Tomcat的webapps/manager/WEB-INF文件夹并打开
WEB.xml

二,。您将发现此标记
,如下所示:

<multipart-config>
  <!-- 50MB max (size in bytes) -->
  <max-file-size>52428800</max-file-size>
  <max-request-size>52428800</max-request-size>
  <file-size-threshold>0</file-size-threshold>
</multipart-config>

希望这对您有所帮助:)

您想通过tomcat配置完成吗?@AnishB。在理想情况下,我更希望能够在respose中返回一些JSON。但如果不可能,配置方面也是可以接受的。首先,如果客户端没有发送带有
内容类型的
Expect:100 continue
头,那么服务器不能“提前”拒绝请求。第二,如果客户端发送整个文件,就没有办法告诉客户端在中间停止。我怀疑Nginx终止了连接。Tomcat没有这样做,而是读取整个请求以刷新它。多部分配置完成了这一任务!但我决定使用一些不同的方法组合:1。在前端验证文件大小,以提供用户友好的错误;2.Nginx级别的限制;3.基于
StandardMultipartTTpServletRequest
的原始应用程序级别限制-仅作为补充。
http {
    client_max_body_size 50M;
}