Spring secutity и Multipart

У меня есть службы, которые снабжены токеном, как в следующем примере: qaru.site/info/29085/...

Проблема в том, что когда я добавлял загрузку файла, фильтр не может найти токен в запросе (я думаю, причина в том, что запрос имеет множественный тип)

Я использую CommonsMultipartResolver

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="100000000"/>
</bean>

и простой контроллер spring для приема файла @RequestParam("pic") MultipartFile pic

Чтобы устранить проблему, я изменил, извлечение маркера, если запрос имеет многочастный тип:

if(request.getContentType().contains("multipart/form-data")){ 
  List<FileItem> items = new ServletFileUpload(new  DiskFileItemFactory()).parseRequest((HttpServletRequest) request);
    for (FileItem item : items) {
               if (item.isFormField() &&  item.getFieldName().equals("token")) {
                return  item.getString();
               }
       }
    }

Наконец, после этой модификации аутентификации работает, но в контроллере MultipartFile не отправляется больше, поэтому он выдает исключение, которое не запрашивает параметр. Как я могу решить эту проблему, чтобы иметь возможность получать файлы с аутентификацией токена?

Ответ 1

Думаю, вам нужно добавить MultipartFilter. Как это сделать, зависит от того, какой стиль настройки вы используете. В нашем случае мы добавили эти строки в наш метод WebApplicationInitializer.onStartup():

    FilterRegistration.Dynamic multipartFilter = servletContext.addFilter("multipartFilter", new MultipartFilter());
    multipartFilter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/*");