您的位置:首页 > 编程语言 > Java开发

Spring上传时报Invalid CSRF Token错误解决方案

2016-04-16 18:06 781 查看

概述

使用spring security之后,默认上传文件会报这个错,解决方案有下面两个:

解决方案一: 将 MultipartFilter 放在 springSecurityFilterChain 前面

修改web.xml文件:

<!-- 文件上传过滤器,过滤上传请求不经过spring security -->
<filter>
<filter-name>MultipartFilter</filter-name>
<filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MultipartFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- spring security 配置 -->
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


只要文件上传过滤器放在spring security 的过滤器前就好了。

这样配置之后,任何用户都可以上传临时文件到服务器,但是,只有认证用户才可以提交表单。因为临时文件对服务器影响不大(除了大规模上传),所以,这样配置大多数情况下都是安全的。spring 官方也推荐这样配置。

解决方案二:在form的action属性里加上 CSRF token

修改上传文件的form:

<form:form action="/fileupload?${_csrf.parameterName}=${_csrf.token}" method="post" commandName="goods"  enctype="multipart/form-data">
...
</form:form>


可见,上面就增加了
${_csrf.parameterName}=${_csrf.token}
,但是这种方法会泄露参数,因为这样配置之后,上面这个参数直接就是可见的。更多信息参考:RFC 2616 Section 15.1.3 Encoding Sensitive Information in URI’s.

参考文档

16.5.4 Multipart (file upload)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: