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配置
- 您遵循了相关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
:- 另一种配置是使用servlet 3.0的多部分处理。 无需依赖apache commons fileupload,也不需要将任何bean添加到配置中,因为
MultipartFilter
使用StandardServletMultipartResolver
作为默认值。
您只需在
web.xml
中的DispatcherServlet
声明中添加
元素dispatcher org.springframework.web.servlet.DispatcherServlet - 您遵循了相关post的第一个解决方案,并在