是否可以在接收请求主体之前拦截请求

时间:2019-07-19 12:57:51

标签: java tomcat

原始问题:例如,将分段文件上传大小限制为10mb在Tomcat级别。

我当前的解决方案(基于Spring Boot的StandardMultipartHttpServletRequest)首先在内部检查Content-Length请求标头。到目前为止听起来还不错...

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

看起来像tomcat在应用任何应用程序逻辑之前将完整的请求主体加载到低层。

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

问题:从技术上来说,在请求正文上传完成之前,可以在Tomcat中执行任何逻辑吗?特别是为了限制文件大小?

1 个答案:

答案 0 :(得分:1)

设置tomcat上传大小的步骤:

1。转到Tomcat的webapps / manager / WEB-INF文件夹,然后打开 HashMap

2。您会找到此标签 web.xml,如下所示:

<multipart-config>

3。根据您的需要更改以上配置。

4。对于nginx,在所需的任何块中设置client_max_body_size:

示例:

<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>

希望这对您有所帮助:)