我正在尝试启用csrf保护,但仅用于登录页面。我添加了以下春季安全性配置(<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错误。但是,如果我在disabled="true"
标记中添加<sec:csrf/>
,它将再次起作用。
知道为什么吗?
谢谢
如果启用了csrf,则如该问题所述,POST请求将执行注销。也许这个(Logout is not working in Spring Security)可以帮助您。
如果启用了CSRF保护(默认),Spring Security的LogoutFilter仅处理HTTP POST。这样可以确保注销需要CSRF令牌,并且恶意用户不能强制注销用户。最简单的方法是使用表单注销。如果您确实想要一个链接,则可以使用JavaScript来使该链接执行POST(即可能以隐藏形式)。对于禁用了JavaScript的浏览器,您可以选择使该链接将用户带到将执行POST的注销确认页面。
在本节中,虽然通常不建议这样做,但也说明了如何执行HTTP GET请求以注销。