文件上传&春季安全

时间:2015-01-29 21:54:07

标签: spring-security

根据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'上找到。

说明禁止访问指定的资源。

这里缺少什么?

1 个答案:

答案 0 :(得分:0)

更改应用程序的Java配置后,此问题已得到解决。以下是这些变化。

在AbstractAnnotationConfigDispatcherServletInitializer类中,我在getServletFilters方法中添加MultipartFilter,并在customizeRegistration(ServletRegistration.Dynamic registration)方法中使用MultipartConfigElement设置MultipartConfig。最初在WebMvcConfigurerAdapter类中定义的MutlipartConfigElement将被删除。并且类中定义的MultipartResolver保持不变。

Java配置是基于应用程序的原始XML配置设置的。该方法并不总是基于这种情况。