根据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令牌'null'在请求参数'_csrf'或标题'X-CSRF-TOKEN'上找到。
说明禁止访问指定的资源。
这里缺少什么?
答案 0 :(得分:0)
更改应用程序的Java配置后,此问题已得到解决。以下是这些变化。
在AbstractAnnotationConfigDispatcherServletInitializer类中,我在getServletFilters方法中添加MultipartFilter,并在customizeRegistration(ServletRegistration.Dynamic registration)方法中使用MultipartConfigElement设置MultipartConfig。最初在WebMvcConfigurerAdapter类中定义的MutlipartConfigElement将被删除。并且类中定义的MultipartResolver保持不变。
Java配置是基于应用程序的原始XML配置设置的。该方法并不总是基于这种情况。