Spring Security 3.2,CSRF和多部分请求

这个问题与此url上的问题有关Spring Security 3.2 CSRF对多部分请求的支持

我尝试了这个完全相同的设置以及要点,但除非我在url中有_csrf令牌,否则我无法使用它。 我在表单主体中将它作为隐藏字段并在安全filter之前指定了filter,但没有任何欢乐,并且每次都使用无效csrf令牌的调试日志消息失败

任何有关这方面的帮助将不胜感激

干杯达米恩

没有要点就很难找到,但我终于明白了!

实际上它与Spring安全性无关。 真正的问题只出现在SpringFramework多部分配置中。 但正因为如此,请求似乎根本没有参数(既不是_csrf ,也不是file ),第一个检测它的是CsrfFilter 。 我删除了有关安全性的所有内容,错误是Requested parameter file absent (或类似的东西……)

如Spring Framework手册中所述 ,multipart可以通过两种方式处理:

  • 使用Apache commons fileupload
  • 使用servlet 3.0配置

    1. 您遵循了相关post的第一个解决方案,并在mvc-dispatcher-servlet.xml配置了CommonsMultipartResolver 。 第一个问题是MultipartFilter与全局ServletContext相关,并在根应用程序上下文中查找其MultipartResolver ,而不是在servlet特定的上下文中查找。

    第二个问题是你忘了在pom.xml添加Apache commons fileupload的依赖性。

    因此,您必须首先在pom.xml添加此依赖项

      commons-fileupload commons-fileupload 1.3.1  

    接下来,您必须从mvc-dispatcher-servlet.xml删除filterMultipartResolver bean,并在根应用程序上下文中声明它。 作为快速而又脏的修复,您可以将其添加到spring-security.xml

        
    1. 另一种配置是使用servlet 3.0的多部分处理。 无需依赖apache commons fileupload,也不需要将任何bean添加到配置中,因为MultipartFilter使用StandardServletMultipartResolver作为默认值。

    您只需在web.xml中的DispatcherServlet声明中添加元素

      dispatcher org.springframework.web.servlet.DispatcherServlet