我的过滤器检查多部分帖子,并可能在到达实际端点(球衣,超出我的控制范围)之前拒绝它们。允许随意的多部分解析(如下面的答案所示)解决了异常:无法处理部分,因为没有提供多部分配置
设置属性时,自定义 CommonsMultipartResolver 或现有解析器可以正常工作,不会出现错误。但是,访问/解析后内容会丢失。
我可以使用自定义的 CommonsMultipartResolver 并按照此处的建议处理丢失的信息:在 spring 过滤器中解决多部分/表单数据请求。但是,我希望有一个更干净的解决方案添加过滤器,而不复制请求。
要启用 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);
}
};
}
TomcatEmbeddedServletContainerFactory
。
看看问题的其余部分(或者“我希望有一个更干净的解决方案添加过滤器,而不复制请求”),我严重怀疑是否有这样的解决方案。
请求仅通过网络发送一次。它包含多部分数据,一旦使用这些数据(即从流中读取),流现在将如何使用完整的数据转发到下一个处理器?
我猜通用解决方案只是接收整个数据,决定将其转发到哪里,然后发送整个数据。如果没有存储其间的数据,它就无法工作,这被您标记为“复制请求”。