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)相关文章推荐
- 20145107 《Java程序设计》第二次实验报告
- 简单Java 多表联查分页显示(初)
- 20145107 《Java程序设计》第七周学习总结
- Ubuntu 14.04 eclipse 提示框背景色更改
- Java_oop_继承
- 20145304 Java第七周学习报告
- spring + myBatis 常见错误:@Autowired注解失败
- Java-单机版的书店管理系统(练习设计模块和思想_系列 六 )
- Java-单机版的书店管理系统(练习设计模块和思想_系列 六 )
- java web 分页实现的补充
- JAVA第五次作业
- com.domain.*_$$_javassist_6 cannot be cast to javassist.util.proxy.Proxy问题
- Java操作MySQL数据库示例
- Java对象的序列化和反序列化
- java基础(2)--java.lang.ThreadLocal类的用法
- java 学习笔记(1)String
- Java基本数据类型
- java泛型II-泛型中存在的约束与局限性
- Java发送邮件程序
- Java中的运算符