繁体   English   中英

Spring Multipart / Form-Data CSRF问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM