Spring安全性和Multipart

时间:2013-08-29 09:58:43

标签: java spring spring-mvc spring-security

我有使用令牌保护的服务,如下例所示:https://stackoverflow.com/a/10864088/278279

问题是当我添加文件上传时,过滤器在请求中找不到令牌(我认为原因是该请求有多部分类型)

我正在使用CommonsMultipartResolver

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

和简单的弹簧控制器接收文件@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 个答案:

答案 0 :(得分:1)

我认为您需要添加MultipartFilter。如何执行此操作会因您使用的配置风格而异。在我们的示例中,我们已将这些行添加到WebApplicationInitializer.onStartup()方法中:

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