在Spring Security&中禁用Remember-Me; Tomcat的

时间:2012-04-09 09:40:55

标签: java spring session tomcat spring-mvc

我想知道,有没有办法在Spring Security中禁用remember-me? 我想实现的场景很常见:关闭浏览器窗口后,我希望用户的会话过期。看起来很奇怪,但它不适用于Tomcat 7& Spring Security 3.1。 我们在Spring Security配置文件中使用auto-config,但是没有remember-me元素。

让它运作的最佳解决方案是什么?提前谢谢!

更新以下是澄清我的问题的使用方案:

  1. 用户登录到受限制的区域,例如/secure.html
  2. 然后他关闭浏览器而不手动注销。
  3. 他再次打开浏览器并直接转到/secure.html。
  4. 当前Spring的行为:页面显示成功。预期的行为:重定向到登录页面。
  5. 用于鉴别诊断的

    新症状: 用户很可能是重新认证的,因为JSESSIONID在浏览器关闭/打开之间是相同的。如何让Tomcat或Spring为每个浏览器会话生成一个新会话?

    更新 Spring Security配置片段:

    <http auto-config="true">
        <anonymous key="anonymous-security" />
        <intercept-url pattern="/auth/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
        <intercept-url pattern="/**" access="ROLE_ADMIN" />
        <form-login login-page="/auth/login.html" 
                    default-target-url="/auth/default.html"
                    authentication-failure-url="/auth/failed.html" />
        <logout logout-success-url="/auth/logout.html" delete-cookies="JSESSIONID" />
    </http>
    

    更新文档claims自3.0以来auto-config =“true”中没有默认的remember-me配置(我们使用3.1):

      

    在3.0之前的版本中,此列表还包括remember-me   功能。这可能会导致一些令人困惑的错误   配置并在3.0中删除。

    我的网络应用有什么问题?

4 个答案:

答案 0 :(得分:0)

为什么不通过重定向到以下命令注销现有用户:/ j_spring_security_logout?

答案 1 :(得分:0)

在我使用最新的Spring安全性和Tomcat 6的实现中,我使用以下配置:它与您的相似吗?

<http use-expressions="true" access-denied-page="/Error.xhtml">
    <intercept-url access="isAuthenticated()" pattern="/secure.xhtml"/>               
    <form-login />
    <logout invalidate-session="true" logout-success-url="/search.xhtml"/>
</http>

答案 2 :(得分:0)

您可以尝试添加logouthandler来终止本地会话:

<!-- Logout handler terminating local session -->
<bean id="logoutHandler" class="org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler">
    <property name="invalidateHttpSession" value="true" />
</bean>

实际上它默认为true,因此您可能不需要设置属性。

答案 3 :(得分:0)

问题澄清:

我遇到了同样的问题:我的浏览器会记住我的用户。

通常:在登录访问受限区域后,关闭浏览器,然后重新打开它并输入相同的限制区域,当我希望提示输入凭据时,它会让我访问它。

在玩完之后我注意到一件重要的事情:这种行为在浏览器中不一致

  • 关闭后,Eclipse的底层浏览器会记住
  • Chrome在关闭后确实记得
  • IE(9)在关闭后不记得
  • Firefox(16.0.1)在关闭后不记得
  • Safari(Windows的5.1.7)在关闭后不记得

更多浏览器类型&amp;版本可以测试......

解决方案:

  1. 解决方法可能是尝试检测用户何时关闭其浏览器,并在发生这种情况时触发注销。不太确定那是多么可行。
  2. 可能有更好的解决方案,如果我找到它,我会更新这个答案。