tomcat 在附加servlet过滤器中解析多部分请求,而不会丢失上载的内容

edqdpe6u  于 2022-11-13  发布在  其他
关注(0)|答案(2)|浏览(209)

我的过滤器检查多部分帖子,并可能在它们到达实际端点(jersey,在我的控制之外)之前拒绝它们。允许随意的多部分解析(如下面的答案所示)解决了这个异常:由于未提供多部件配置,因此无法处理部件
设置该属性时,自定义CommonsMultipartResolver或现有的解析程序正常工作,不会出现错误。但是,在访问/解析内容后,内容会丢失。
我可以使用一个自定义CommonsMultipartResolver,并按照下面的建议处理丢失的信息:但是,我希望有一个更干净的解决方案添加过滤器,而不复制请求。

aiazj4mn

aiazj4mn1#

要启用Tomcat ContextallowCasualMultipartParsing属性,您可以将自定义TomcatServletWebServerFactory注入到应用程序中(Sping 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);
        }
    };
}

对于Sping Boot 1,工厂类为TomcatEmbeddedServletContainerFactory

irtuqstp

irtuqstp2#

看看问题的其余部分(或者“我希望有一个更干净的解决方案,添加过滤器,而不复制请求”),我严重怀疑是否有一个。
请求只在网络上发送一次。它包含多部分数据,一旦这些数据被使用(即从流中读取),流现在将如何与完整的数据一起转发到下一个处理器?
我猜通用解决方案就是在那里接收整个数据,决定将其转发到哪里,然后发送整个数据。如果没有将数据存储在中间,它将无法工作,这被称为“复制请求”。

相关问题