【问题标题】:Spring secutity and MultipartSpring 安全性和 Multipart
【发布时间】:2013-09-01 16:51:09
【问题描述】:

我的服务受令牌保护,如下例所示: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 中没有发送更多,所以它抛出了请求中没有参数的异常。我该如何解决这个问题才能接收带有令牌身份验证的文件?

【问题讨论】:

    标签: java spring spring-mvc spring-security


    【解决方案1】:

    我认为您需要添加 MultipartFilter。如何做到这一点因您使用的配置风格而异。在我们的例子中,我们将这些行添加到我们的 WebApplicationInitializer.onStartup() 方法中:

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

    【讨论】:

    • 你可以阅读CSRF and multipart requests。请注意,我发现我们必须在 Spring Security 过滤器之后添加 MultipartFilter ,而不是在文档之前添加。
    猜你喜欢
    • 1970-01-01
    • 2011-09-22
    • 2015-03-05
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-05
    • 2012-02-01
    相关资源
    最近更新 更多