2017-08-07 128 views
0

我正在從struts遷移到春季遷移。由於我正在研究最新的春季版4.3,我們決定爲我們的應用程序提供CSRF保護。在我們的JSP頁面上,我們有兩個可用http get方法調用的選項卡,可以調用spring controller。每個標籤都有多個鏈接和按鈕。獲得通話後如果我在頁面上執行任何操作,例如單擊一個按鈕,該按鈕會向控制器發送呼叫。我收到403條禁止消息「期望的CSRF令牌未找到,您的會話是否過期?」 。春季CSRF HTTP 403禁止錯誤

在Firefox開發人員工具發佈調用表單數據時,我可以看到帶有令牌的_csrf。響應標題表示x框架選擇:拒絕。我懷疑前面的選擇導致問題的選項卡上的HTTP GET。我們是否也需要爲http GET方法傳遞csrf標記?任何幫助?

+1

您可能需要分享一些代碼,因爲它不清楚您要問什麼。首先,不,您當然不需要發送GET請求的CSRF令牌,但是當GET請求由控制器處理時,會生成一個新的CSRF令牌,這就是Spring Security期望收到的內容下面的POST。在GET之後顯示的頁面中,您是否仍然看到CSRF令牌,並且是否更新?在GET之前和之後,您應該在瀏覽器中看到CSRF令牌的不同值。 – DaveyDaveDave

+0

GET調用後,我得到相同的csrf標記。其實我並沒有寫任何新的代碼來從響應中讀取。我正在使用的是彈簧mvc 標記或。按照Spring文檔https://stackoverflow.com/questions/26866529/spring-csrf-token-life默認的csrf令牌生存期是基於會話的。我會嘗試在這裏添加一些代碼。 – Kiran

回答

0

正如我所說的我正在從事移植項目,對於每個調用現有代碼,他們正在使用實用方法之一清理會話屬性。儘管由於實用程序方法中的會話清理,我在每個請求中都發送令牌,但我的令牌正在與空值進行比較。因此它拋出錯誤「沒有找到期望的CSRF令牌,您的會話是否過期」。

現在解決了。謝謝。