Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有多部分/表单数据的Spring security 3.2.0 RC1 csrf_Spring_Spring Mvc_Spring Security_Csrf - Fatal编程技术网

具有多部分/表单数据的Spring security 3.2.0 RC1 csrf

具有多部分/表单数据的Spring security 3.2.0 RC1 csrf,spring,spring-mvc,spring-security,csrf,Spring,Spring Mvc,Spring Security,Csrf,我一直在使用Spring Security 3.2.0.RC1中的新csrf功能,并注意到它似乎不适用于enctype=“multipart/form data”表单 我有一个简单的弹簧形式: <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> ... <form:form action="${pageContext.request.contextPath}/model/creat

我一直在使用Spring Security 3.2.0.RC1中的新csrf功能,并注意到它似乎不适用于enctype=“multipart/form data”表单

我有一个简单的弹簧形式:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
...
<form:form action="${pageContext.request.contextPath}/model/create" modelAttribute="myForm" enctype="multipart/form-data">

...
隐藏的csrf输入按预期呈现:

<input type="hidden" value="..." name="_csrf">


但该请求未通过csrf检查(如果我删除enctype=“multipart/form data”,则可以正常工作)。我发现解决这个问题的唯一方法是将“?\u csrf=…”附加到我的操作url,这很难看,因为重定向时标记会出现在地址栏中。是否有人体验过相同的/找到了一个不错的解决方案?

目前,CSFR保护需要/读取一个请求参数,但是由于您的表单类型不同,表单内容不能作为请求参数使用。如果您将其添加到URL,它将作为请求参数提供

DispatcherServlet
内部有多部分检测,这样的请求被包装在一个实现中,该实现对多部分请求进行解码,并将内容作为请求参数提供

但是,Spring安全过滤器在此之前执行。在出现之前,您可以在Spring安全过滤器链之前配置并执行。这基本上是在
DispatcherServlet
前面进行包装解码。这里需要提醒的一点是,您还需要将它置于Spring Security filter之前


示例配置和其他解决方案可以在Spring Security中找到。

注意:@m-deinum引用的Jira未解决。您可以在这里找到如何对多部分/表单数据进行CSRF保护。我已经在最新的Spring安全文档中向web.xml中添加了MultipartFilter,但是每当调用需要多部分文件的控制器方法时,仍然会出现拒绝访问错误。可以在上查看相关配置。您已经添加了它,但您的配置错误。您将
多部件解析器
置于错误的配置中。
MultipartFilter
仅读取根应用程序上下文(由
ContextLoaderListener加载的上下文,将其移动到由其加载的xml文件中).@M.Deinum应用MultipartFilter后,我在筛选器中获得空文件且没有零件数据。你能推荐点什么吗?@M.Deinum找到了。。。将bean MultipartFilter的位置更改为applicationContext.xml,它可能与的重复