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