【发布时间】:2015-03-29 07:22:19
【问题描述】:
基于Spring Security documentation,我设置了一个MultipartFileter,如下:
@Order(1)
public class SecurityWebAppInitializer
extends AbstractSecurityWebApplicationInitializer {
@Override
protected void beforeSpringSecurityFilterChain(ServletContext servletContext) {
insertFilters(servletContext, new MultipartFilter());
}
在文件上传表单中,我可以在 HTML 文件中看到带有非空值的 CSRF 输入(参见下面的代码)。
<form method="POST" enctype="multipart/form-data" action="/upload">
File to upload: <input type="file" name="file" /><br />
Name: <input type="text" name="name" /><br /> <br />
<input type="submit" value="Upload" />
Press here to upload the file!
<input type="hidden" name="_csrf" value="df94be7d-675d-428c-89e5-2ebf0b473c42" />
</form>
提交表单后,我收到一个错误
HTTP 状态 403 - 在请求参数“_csrf”或标头“X-CSRF-TOKEN”上发现无效的 CSRF 令牌“null”。
输入状态报告
在请求参数“_csrf”或标头“X-CSRF-TOKEN”上发现消息无效的 CSRF 令牌“null”。
说明对指定资源的访问已被禁止。
这里缺少什么?
【问题讨论】:
-
你有
MultipartResolver吗? -
是的,我愿意。为了验证它是否有任何区别,我将 MutipartResover 注释掉,我得到了同样的原因。我看不到解析器定义与空 CSRF 令牌的关系。所以,请赐教。
-
如果没有正确配置多部分解析器,Spring Security 无法在
multipart/form-data中找到 CSRF 令牌。你的MultipartResolverbean 定义? -
感谢您的提示。问题已解决。有关详细信息,请参阅我对我自己的问题的回答。您可能知道哪些更改会产生影响。
标签: spring-security