3

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

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

更新这是澄清我的问题的使用场景:

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

鉴别诊断的新症状:用户很可能被重新认证,因为浏览器关闭/打开之间的 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>

更新文档声称自 3.0 以来 auto-config="true" 中没有默认的记住我配置(我们使用 3.1):

在 3.0 之前的版本中,此列表还包括记住我功能。这可能会导致某些配置出现一些令人困惑的错误,并已在 3.0 中删除。

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

4

4 回答 4

0

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

于 2012-04-09T09:46:21.450 回答
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>
于 2012-04-09T10:06:35.240 回答
0

问题说明:

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

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

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

  • Eclipse 的底层浏览器在关闭后确实记得
  • 关闭后 Chrome 确实记得
  • IE(9)关闭后不记得了
  • Firefox (16.0.1) 关闭后不记得了
  • Safari(5.1.7 for windows)关闭后不记得了

可以测试更多浏览器类型和版本...

解决方案:

  1. 一种解决方法可能是尝试检测用户何时关闭其浏览器,并在发生这种情况时触发注销。不太确定这是多么可行。

可能有更好的解决方案,如果我找到它,我会更新这个答案。

于 2012-10-19T09:39:19.703 回答
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,因此您可能不需要设置该属性。

于 2012-04-09T11:58:32.187 回答