spring authentication:无法注销

时间:2015-09-04 09:04:58

标签: spring spring-security

我是Spring的新手。我无法使用Spring安全注销。 登录工作正常,我在this post之后执行注销功能。

但我无法使其发挥作用。 这是我的spring-security.xml:

<security:http auto-config="true"  use-expressions="true">
  <security:intercept-url pattern="/index" access="hasRole('ROLE_USER')" />
  <security:logout logout-success-url="/index" logout-url="/logout" />   
</security:http>

<security:authentication-manager>
  <security:authentication-provider>
    <security:user-service>
      <security:user name="matt3o" password="secret" authorities="ROLE_USER" />
    </security:user-service>
  </security:authentication-provider>
</security:authentication-manager>

这是我的index.jsp:

<c:if test="${pageContext.request.userPrincipal.name != null}">
  <h2>Welcome : ${pageContext.request.userPrincipal.name}         
</c:if>
<p><a href="logout">Logout</a></p>

请有人向我解释一下loggin / loggout的工作原理以及我退出的原因是什么?

在index.jsp中,我尝试以不同的方式注销,但没有一个能够正常工作:

<!--1-->
<c:url value="/logout" var="logoutUrl" />
<form id="logout" action="${logoutUrl}" method="post" >
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
</form>
<c:if test="${pageContext.request.userPrincipal.name != null}">
<a href="javascript:document.getElementById('logout').submit()">Logout</a>
</c:if>
<br><br>

<!--2-->
<a href="logout">logout1</a>             
<br><br>

<!--3-->
<a href='<c:url value="j_spring_security_logout" />'>logout</a>

2 个答案:

答案 0 :(得分:1)

Spring Security 4需要POST请求才能注销而不是GET。默认情况下,它旁边使用CSFR令牌进行保护,您需要将其添加到表单中(请参阅javadoc)。

因此,使用表单来调用注销,而不是链接。

<c:url var="logoutUrl" value="/logout"/>
<form action="${logoutUrl}" method="post">
    <input type="submit" value="Log out" />
    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
</form>

或使用安全标记库时

<c:url var="logoutUrl" value="/logout"/>
<form action="${logoutUrl}" method="post">
    <input type="submit" value="Log out" />
    <sec:csrfInput />
</form>

另请参阅参考指南中的herehere

如果您想使用GET,请将注销功能配置为支持GET请求(为此您需要提供ant匹配器)或禁用CSFR,这可以通过将<sec:csfr disabled="true" />添加到您的xml配置。

答案 1 :(得分:0)

你可以使用

href="<c:url value="/logout"/>"