[英]Spring security: activating csrf disables /logout
我正在嘗試啟用 csrf 保護,但僅適用於登錄頁面。 我添加了以下 spring 安全配置( <http>
標簽已經存在)
<http ... >
<sec:csrf request-matcher-ref="myBean" />
...
</http>
<bean id="myBean" class="org.springframework.security.web.util.matcher.AntPathRequestMatcher">
<constructor-arg name="pattern" value="/login"/>
<constructor-arg name="httpMethod" value="POST"/>
</bean>
登錄頁面現在確實有 csrf 保護。 然而,出於一個奇怪的原因, /logout
現在給出了 404 錯誤。 事實上,如果我將/login
替換為/foobar
,我仍然會在 /logout 上出現 404 錯誤。 但是如果我在<sec:csrf/>
標簽中添加disabled="true"
,它會再次工作。
知道為什么嗎?
謝謝
如果啟用了 csrf,POST 請求將執行注銷,如本問題所述。 也許這( 注銷在 Spring Security 中不起作用)可以提供幫助。
如果啟用了 CSRF 保護(默認),Spring Security 的 LogoutFilter 將只處理 HTTP POST。 這確保注銷需要 CSRF 令牌,並且惡意用戶無法強行注銷您的用戶。 最簡單的方法是使用表單注銷。 如果你真的想要一個鏈接,你可以使用 JavaScript 讓鏈接執行 POST(即可能在隱藏的表單上)。 對於禁用 JavaScript 的瀏覽器,您可以選擇讓鏈接將用戶帶到將執行 POST 的注銷確認頁面。
本節還解釋了如何執行 HTTP GET 請求以注銷,盡管通常不推薦這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.