Фильтр загрузки Primefaces мешает загрузке сервлета - PullRequest
1 голос
/ 26 мая 2020

У меня следующая проблема: в моем веб-приложении Spring Boot с пользовательским интерфейсом Primefaces я хочу загрузить ресурсы в бэкэнд. Я также хочу сделать веб-сервис доступным для загрузки ресурсов через веб-сервер.

Кажется, что фильтр загрузки Primefaces мешает веб-сервису.

Мой класс 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;
      }
   }

Мой класс сервлета выглядит так:

@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, веб-сервлет не работает (части файлов пустые). Обработчик загрузки для пользовательского интерфейса Primefaces работает правильно. Когда я раскомментирую фильтр загрузки Primefaces, веб-сервлет работает нормально, и файловые части заполняются. Но обработчик загрузки пользовательского интерфейса Primefaces не вызывается вообще.

В чем проблема? Мне нужно перенастроить фильтр загрузки?

Спасибо за любую помощь.

1 Ответ

4 голосов
/ 26 мая 2020

По сути, ваш фильтр «слушает» слишком широко. FilterRegistrationBean имеет возможность установить имя сервлета.

Регистрации могут быть связаны с шаблонами URL и / или сервлетами (либо по имени, либо через ServletRegistrationBeans. Если шаблон URL отсутствует или указаны сервлеты, фильтр будет связан с '/ *'. Имя фильтра будет выведено, если не указано.

Попробуйте это вместо шаблона URL, как это сделано в этом ответе

<servlet-name>facesServlet</servlet>
...