春季多部分/表单数据 csrf 问题



我一直在使用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(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>

确定我的豆子或我的豆子的实际方法没有问题,因为在我启用春季安全性之前一切都在工作,如果我关闭它,一切都运行顺利,但我需要启用它,所以我面临这个问题。

在弄乱了网络中过滤器的顺序后修复了.xml。顺序必须是:- Primefaces过滤器- (我确实编辑了一个转发标签)- 多部分过滤器-- 弹簧过滤器 -- 漂亮的脸过滤器,带有异步标签-

谢谢。

最新更新