【发布时间】:2015-11-30 09:08:42
【问题描述】:
我是 Spring 新手。我无法使用 spring security 注销。 登录正常,我正在关注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 的工作原理以及为什么我的 logout 没有?
在 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>
【问题讨论】:
-
那里没有什么可以登录的,所以你至少没有包含完整的配置。接下来你的链接是错误的
logout是相对的,而你可能想要一个绝对 URL 到/logout。 -
现在要发布以注销
-
@M.Deinum 我已将身份验证管理器添加到我的帖子中。这就是我在安全配置文件中的全部内容。登录工作正常。
-
您使用哪个版本的 Spring Security?
-
那么你需要发布登录而不是获取。因此,该链接无济于事,您需要一个表单并将其提交到注销 URL,并记住包含 csfr 令牌。