【问题标题】:Spring CSRF multipart not workingSpring CSRF多部分不起作用
【发布时间】:2017-10-27 17:16:46
【问题描述】:

Spring CSRF 不适用于带有文件上传的多部分表单。它适用于其他请求。我的 web.xml 看起来像这样 -

<filter>
        <filter-name>MultipartFilter</filter-name>
        <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>MultipartFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
...
some more filters
...
<filter>
        <filter-name>csrfFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>csrfFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

我已经在我的 appcontext-servlet.xml 中定义了这个 bean -

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

我还定义了 csrfFilter。定义了 filterMultipartResolver bean,我被重定向到我们的默认 404 页面。如果没有 bean,我会收到一个错误页面,说我发送了一个空令牌。当我在 chrome 开发人员工具中看到请求时,它包含以下部分以及表单的其余部分(令牌已附加两次,因为我在页面加载时使用 javascript 这样做一次,并且可能在发送时这样做一次。我是什么不见了?

------WebKitFormBoundaryHMYSQ8eg6FXpxqDA 内容处置:表单数据; name="_csrf"

16a983e0-a115-43d9-aa72-09c9576d53df ------WebKitFormBoundaryHMYSQ8eg6FXpxqDA 内容处置:表单数据; name="_csrf"

16a983e0-a115-43d9-aa72-09c9576d53df

【问题讨论】:

    标签: javascript spring-security csrf multipartform-data


    【解决方案1】:

    我不知道您是否已经解决了这个问题,但即使我遇到了与您面临的相同问题,包括类似的代码。我的唯一区别是:

    <filter>
        <display-name>springMultipartFilter</display-name>
        <filter-name>springMultipartFilter</filter-name>
        <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>springMultipartFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>csrfFilter</filter-name>
        <servlet-name>customApplication</servlet-name>
    </filter-mapping>
    <servlet>
        <servlet-name>customApplication</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>customApplication</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    此外,这里描述的帖子也将帮助那些遇到同样问题的人: Spring Security 3.2 CSRF support for multipart requests

    【讨论】:

      猜你喜欢
      • 2019-03-05
      • 2018-12-12
      • 2014-02-26
      • 2017-11-05
      • 2014-09-30
      • 2020-11-21
      相关资源
      最近更新 更多