在附加 Servlet Filter 中解析多部分请求,而不会丢失上传的内容

问题描述 投票:0回答:2

我的过滤器检查多部分帖子,并可能在到达实际端点(球衣,超出我的控制范围)之前拒绝它们。允许随意的多部分解析(如下面的答案所示)解决了异常:无法处理部分,因为没有提供多部分配置

设置属性时,自定义 CommonsMultipartResolver 或现有解析器可以正常工作,不会出现错误。但是,访问/解析后内容会丢失。

我可以使用自定义的 CommonsMultipartResolver 并按照此处的建议处理丢失的信息:在 spring 过滤器中解决多部分/表单数据请求。但是,我希望有一个更干净的解决方案添加过滤器,而不复制请求。

java spring-boot tomcat servlet-filters multipart
2个回答
2
投票

要启用 Tomcat 的

allowCasualMultipartParsing
属性
Context
, 您可以注入自定义的
TomcatServletWebServerFactory
进入您的应用程序(Spring Boot 2):

import org.apache.catalina.Context;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;

@Bean
public TomcatServletWebServerFactory tomcatFactory()
{
    return new TomcatServletWebServerFactory()
    {
        @Override
        protected void postProcessContext(Context context)
        {
            context.setAllowCasualMultipartParsing(true);
        }
    };
}

对于 Spring Boot 1,工厂类是

TomcatEmbeddedServletContainerFactory


1
投票

看看问题的其余部分(或者“我希望有一个更干净的解决方案添加过滤器,而不复制请求”),我严重怀疑是否有这样的解决方案。

请求仅通过网络发送一次。它包含多部分数据,一旦使用这些数据(即从流中读取),流现在将如何使用完整的数据转发到下一个处理器?

我猜通用解决方案只是接收整个数据,决定将其转发到哪里,然后发送整个数据。如果没有存储其间的数据,它就无法工作,这被您标记为“复制请求”。

© www.soinside.com 2019 - 2024. All rights reserved.