Spring boot Primefaces上载筛选器干扰Servlet上载

Spring boot Primefaces上载筛选器干扰Servlet上载,spring-boot,servlets,file-upload,primefaces,Spring Boot,Servlets,File Upload,Primefaces,我有以下问题: 在带有Primefaces UI的Spring Boot Web应用程序中,我希望在后端上载资产。我还想通过webservlet为上传资产提供一个webservice Primefaces上载筛选器似乎干扰了Web服务 我的ServletContextInitializer类: @Configuration public class Initializer implements ServletContextInitializer { @Bean

我有以下问题: 在带有Primefaces UI的Spring Boot Web应用程序中,我希望在后端上载资产。我还想通过webservlet为上传资产提供一个webservice

Primefaces上载筛选器似乎干扰了Web服务

我的ServletContextInitializer类:

   @Configuration
   public class Initializer implements ServletContextInitializer {
      @Bean
      public FilterRegistrationBean FileUploadFilter() {
         FilterRegistrationBean registration = new FilterRegistrationBean();
         registration.setFilter(new org.primefaces.webapp.filter.FileUploadFilter());
         registration.setName("PrimeFaces FileUpload Filter");
         registration.addUrlPatterns("/*");
         registration.setDispatcherTypes(DispatcherType.FORWARD, DispatcherType.REQUEST);
         registration.setAsyncSupported(true);
         return registration;
      }
   }
我的Servlet类如下所示:

@WebServlet(name = "InsertAsset", urlPatterns = {"/InsertAsset"})
@MultipartConfig
public class InsertAsset extends HttpServlet {
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext servletContext = getServletContext();
        System.out.println(servletContext.getMajorVersion() + "." + servletContext.getMinorVersion());

        List<Part> fileParts = request.getParts().stream().filter(part -> "file".equals(part.getName()) && part.getSize() > 0).collect(Collectors.toList());

        for (Part filePart : fileParts) {
            String fileName = Paths.get(filePart.getSubmittedFileName()).getFileName().toString(); 
            InputStream fileContent = filePart.getInputStream();

        }
    }
}
当Primefaces上载筛选器处于活动状态时,webservlet不工作文件部分为空。Primefaces UI的上载处理程序工作正常。 当我取消对Primefaces上传过滤器的注释时,webservlet工作正常,文件部分被填充。但是Primefaces UI上载处理程序根本不会被调用

这里有什么问题?我必须重新配置上传过滤器吗


谢谢你的帮助

实际上,您的过滤器“监听”范围太广。具有设置servlet名称的选项

注册可以通过名称或通过ServletRegistrationBeans与URL模式和/或servlet相关联。当未指定URL模式或servlet时,筛选器将与“/*”关联。如果未指定,将推断筛选器名称

尝试使用该模式而不是url模式,如在中完成


实际上,您的过滤器“监听”范围太广。具有设置servlet名称的选项

注册可以通过名称或通过ServletRegistrationBeans与URL模式和/或servlet相关联。当未指定URL模式或servlet时,筛选器将与“/*”关联。如果未指定,将推断筛选器名称

尝试使用该模式而不是url模式,如在中完成


我必须重新配置上传过滤器吗?你试过了吗?这似乎是一件简单的事。。。但是,是的,我想是的。我只是在过滤器上添加了一个其他订单。但这并没有改变什么。。。有一个过滤器和一个servlet。无论顺序如何,过滤器总是在servlet之前运行。更改过滤器路径,使其与servlet的url模式不匹配,这样更符合逻辑。但是还要检查是否有提示我必须重新配置上传过滤器?你试过了吗?这似乎是一件简单的事。。。但是,是的,我想是的。我只是在过滤器上添加了一个其他订单。但这并没有改变什么。。。有一个过滤器和一个servlet。无论顺序如何,过滤器总是在servlet之前运行。更改过滤器路径,使其与servlet的url模式不匹配,这样更符合逻辑。但也要检查一下提示谢谢你给我指引了正确的方向。我必须为servlet注册第二个过滤器org.springframework.web.multipart.support.MultipartFilter。我将servlet的urlpattern用于这个过滤器,并将顺序更改为比Primefaces上传过滤器更低的顺序。现在它起作用了。谢谢你把我引向正确的方向。我必须为servlet注册第二个过滤器org.springframework.web.multipart.support.MultipartFilter。我将servlet的urlpattern用于这个过滤器,并将顺序更改为比Primefaces上传过滤器更低的顺序。现在它起作用了。
<servlet-name>facesServlet</servlet>