[英]Spring security 3.2.0 RC1 csrf with multipart/form-data
[英]Spring Multipart/Form-data csrf issue
我一直在使用具有multipart/form-data
类型的表单的csrf验证问题,因为它既不让我进行身份验证也不上传我的文件,在尝试执行调用时返回403。
经过一番研究,我发现应该是"multipart/form-data"
表单在csrf方面存在问题,因此我不得不添加
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
我的.xhtml文件中每个表单的注释。 (还尝试了action ='',变化形式) ,但是它一直在返回我的csrf值为null
经过更多研究后,我尝试添加SpringMultipartFilter
<filter>
<display-name>springMultipartFilter</display-name>
<filter-name>springMultipartFilter</filter-name>
<filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>springMultipartFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
并且在表示部分的应用程序上下文中声明了filterMultipartResolver
bean:
<bean id="filterMultipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="-1" />
</bean>
然后,Chrome浏览器确实让我验证了我的用户,并确实让我按下了上传按钮,返回了200(确定)代码,但是该文件未上传,并且调试显示未调用我的方法,控制台不会同时返回Java和Chrome调试控制台的错误,因此,我有点失去了任何帮助来解决或获得实际知识的帮助,谢谢。
我正在使用Spring + Primefaces + Maven。
在.xhtml中上传表单:
<h:form id="uploadForm" enctype="multipart/form-data">
<input type="hidden" name="${_csrf.parameterName}"
value="${_csrf.token}" />
<p:fieldset id="uploadBlock"
legend="#{message['cmb.title1.text.label']}">
<br />
<h:panelGroup layout="block"
style="float : left; margin-right : 10%;">
<h:panelGrid id="display1">
<p:fileUpload update=":tableForm:comparisonTable @this"
fileUploadListener="#{ComparisonCSVController.upload}"
allowTypes="/(\.|\/)(csv)$/i" mode="advanced" fileLimit="1"
description="Select a csv file">
</p:fileUpload>
</h:panelGrid>
</h:panelGroup>
</p:fieldset>
<br />
</h:form>
我肯定这不是我的bean或我的bean的实际方法的问题,因为在启用spring security之前一切都会正常运行,并且如果我将其关闭,则一切运行都会很顺利,但是我需要启用它,因此我面临着这个问题。
在弄乱了web.xml中的过滤器顺序之后进行了修复。 顺序必须为:-Primefaces过滤器-(我确实编辑了一个FORWARD标记)-MultiPart过滤器--弹簧过滤器--Prettyfaces过滤器,并带有ASYNC标记
谢谢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.