Java 在Spring Security中注销不起作用

Java 在Spring Security中注销不起作用,java,spring-security,Java,Spring Security,我正在用SpringSecurity4.0编写一个安全应用程序。作为其中的一部分,我想打一个注销电话。它只是给出了不支持的请求方法“POST”。这是我的密码: spring security.xml jsp <a href="j_spring_security_logout"> <button class="logoutbtn">logout</button></a> <input type="hidden" name="${_csrf

我正在用SpringSecurity4.0编写一个安全应用程序。作为其中的一部分,我想打一个注销电话。它只是给出了不支持的请求方法“POST”。这是我的密码:

spring security.xml


jsp

<a href="j_spring_security_logout">  <button class="logoutbtn">logout</button></a>
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>

我在项目中解决了这个问题。守则如下:


我不知道你能否接受这种方式。
如果打开CSRF,则必须使用post请求注销url。在SpringSecurity4中,CSRF默认打开。这些文档将为您提供更多信息。18.5.3注销

我在项目中解决了这个问题。守则如下:


我不知道你能否接受这种方式。
如果打开CSRF,则必须使用post请求注销url。在SpringSecurity4中,CSRF默认打开。这些文档将为您提供更多信息。18.5.3注销

您也可以在JSP中尝试,因为我认为您的JSP不正确。将给定代码替换为以下代码:

<form action="/j_spring_security_logout">

    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
    <input type="submit" value="logout">

</form>

在您没有提交表单的情况下,您只是向
j_spring\u security\u logout
发出get请求,但它需要一个带有POST请求的CSRF令牌,因此它将返回您收到的错误消息


编辑:撤消您对上一个答案所做的更改,因为这只是对您已有内容的修改。

您也可以在JSP中尝试,因为我认为您的JSP不正确。将给定代码替换为以下代码:

<form action="/j_spring_security_logout">

    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
    <input type="submit" value="logout">

</form>

在您没有提交表单的情况下,您只是向
j_spring\u security\u logout
发出get请求,但它需要一个带有POST请求的CSRF令牌,因此它将返回您收到的错误消息


编辑:撤消对上一个答案所做的更改,因为这只是对已有答案的修改。

如果使用CSRF,则必须使用HTTP
POST
(JSP中带有
)而不是HTTP
GET
(带有

18.5.3注销

添加CSRF将更新LogoutFilter以仅使用HTTP POST。这将确保注销需要CSRF令牌,并且恶意用户无法强制注销您的用户

一种方法是使用表单进行注销。如果确实需要链接,可以使用JavaScript让链接执行POST(即,可能在隐藏表单上)。对于禁用JavaScript的浏览器,可以选择让链接将用户带到将执行POST的注销确认页面

例如,请参见:

37.5.1自动令牌包含

Spring Security将在使用Spring MVC表单标记的表单中自动包含CSRF令牌。例如,以下JSP:



如果使用CSRF,则必须使用HTTP
POST
(JSP中带有
)而不是HTTP
GET
(带有

18.5.3注销

添加CSRF将更新LogoutFilter以仅使用HTTP POST。这将确保注销需要CSRF令牌,并且恶意用户无法强制注销您的用户

一种方法是使用表单进行注销。如果确实需要链接,可以使用JavaScript让链接执行POST(即,可能在隐藏表单上)。对于禁用JavaScript的浏览器,可以选择让链接将用户带到将执行POST的注销确认页面

例如,请参见:

37.5.1自动令牌包含

Spring Security将在使用Spring MVC表单标记的表单中自动包含CSRF令牌。例如,以下JSP:



它对我有效,但我不理解这个代码。你能给我一些解释吗?它会使会话无效吗?它对我有效,但我不理解这个代码。你能给我一些解释吗?它会使会话无效吗?Hello dur,如果我使用AngularJS作为前端,我如何从那里通过post调用注销?见鬼o dur,如果我使用AngularJS作为前端,我如何从那里通过post调用注销?