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