【问题标题】:Spring Security 3 Logout not workingSpring Security 3注销不起作用
【发布时间】:2011-10-05 03:43:33
【问题描述】:

我是 Spring Security 的新手。我在 spring security 3 中创建了一个示例。

我遇到了一个问题。我可以使用默认登录页面成功登录,但是当我注销时,我已成功重定向到我的 loggedout.jsp,但是当检查更改 URL 时,我发现我仍然登录。

春天security.xml:

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/security
        http://www.springframework.org/schema/security/spring-security-3.1.xsd">

    <http pattern="/loggedout.jsp" security="none" />

    <http auto-config='true'>
        <intercept-url pattern="/**" access="ROLE_USER" />
        <logout logout-success-url="/loggedout.jsp" invalidate-session="true"
            delete-cookies="JSESSIONID" />

        <!-- <remember-me key="myAppKey" /> -->
        <!-- <session-management invalid-session-url="/timeout.jsp">
            <concurrency-control max-sessions="1"
                error-if-maximum-exceeded="true" />
        </session-management> -->
    </http>

    <authentication-manager>
        <authentication-provider>
            <user-service>
                <user name="vrajesh" password="vrajesh"
                    authorities="ROLE_USER,ROLE_ADMIN" />
                <user name="test" password="test"
                    authorities="ROLE_USER,ROLE_ADMIN" />
            </user-service>
        </authentication-provider>
    </authentication-manager>

    <!--
        <http pattern="/loggedout.jsp" security="none"/>
        <http use-expressions="true">
            <intercept-url pattern="/**" access="ROLE_USER" />
            <form-login />
            <logout logout-success-url="/loggedout.jsp"
                delete-cookies="JSESSIONID"/>
            <remember-me />
            <session-management invalid-session-url="/timeout.jsp">
                <concurrency-control max-sessions="1"
                    error-if-maximum-exceeded="true" />
            </session-management>
        </http>
    -->

</beans:beans>

这是我在每个页面上的注销链接:

<p><a href="j_spring_security_logout">Logout</a></p>

这是我的loggedout.jsp:

<p>
You have been logged out. <a href="<c:url value='/'/>">Start again</a>.
</p>

在我的loggedout.jsp 中,如果我单击“重新开始”链接,它应该会显示登录页面,但实际上并没有。相反,我登录了应用程序。

请帮助我,如果我遗漏了什么,请告诉我。

【问题讨论】:

  • 请修复您发布的 HTML,并说明您正在运行的实际配置文件。还请澄清“重新开始”导致的链接。您是否启用了调试日志记录?
  • 您是否确认您仍在登录应用程序,而不仅仅是看到浏览器缓存的页面版本?

标签: spring-security logout


【解决方案1】:

我在引用j_spring_security_logout 时遇到了问题,所以我这样做了:

1.- 在spring-security.xml 中添加到部分:

<logout logout-url="/logout.html"/>

2.- 在我的控制器中,我只有:

@RequestMapping(value = "logout.html", method = RequestMethod.GET)
    public String logout(ModelMap model, HttpServletRequest request) {
        return "loginform";
    }

3.- 在我的 .jsp 中:

 <a href="${pageContext.request.contextPath}/logout.html"><fmt:message key="text.exit" /></a>

而且它完美无瑕:)

您可以检查其他注销配置here

【讨论】:

    【解决方案2】:

    每个页面上的注销链接应该是:

    <p><a href="/j_spring_security_logout">Logout</a></p>
    

    【讨论】:

      猜你喜欢
      • 2013-05-24
      • 1970-01-01
      • 2011-08-20
      • 2016-07-12
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      • 2014-05-21
      • 2016-09-30
      相关资源
      最近更新 更多