我一直遇到使用multipart/form-data
类型的csrf验证问题,因为它不允许我验证或上传我的文件,在尝试执行调用时返回403.
经过一些研究,我发现据说"multipart/form-data"
表单有csrf问题,因此我不得不添加
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
我的.xhtml文件中每个表单的注释。
(还尝试了表单操作=&#39;&#39;,变体)
然而它一直在返回,我的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(OK)代码 但是,文件没有上传,调试显示我的方法没有被调用,控制台没有返回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>
我确定我的豆子或我的豆子的实际方法不是问题,因为一切正常,直到我启用弹簧安全,如果我关闭它,一切运行顺利,但我需要它启用,所以我面临这个问题。
答案 0 :(得分:0)
在弄乱web.xml中的过滤器顺序后修复。 订单必须是: - Primefaces过滤器 - (我确实编辑了一个FORWARD标签) - MultiPart过滤器 - - 弹簧过滤器 - - Prettyfaces过滤器,带有ASYNC标签 -
谢谢。