簡體   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