我正在使用Spring Security实现GAE + GWT应用程序的身份验证层。我的问题是关于给定用户配置文件的并发会话。我想同时禁止任何用户使用相同的帐户登录两次。App Engine&Spring安全性:并发会话
一些研究之后,我发现我可以在Spring Security使用做到这一点:
的web.xml
<listener>
<listener-class>org.springframework.security.ui.session.HttpSessionEventPublisher</listener-class>
</listener>
而且在applicationContext.xml中
<session-management>
<concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />
</session-management>
HttpSessionEventPublisher将收到每当在HttpSessionListener中调用sessionDestroyed()时的事件。但据我所知,App Engine从来不会调用它。有一个issue about this
我应该如何使用Spring Security和App Engine实现会话并发限制?
首先,你将不得不定义在这种情况下'同时'的含义。 HTTP是基于请求的,而不是基于连接的;你无法知道用户何时停止使用你的网站 - 他们只是停止发送请求。 – 2012-03-22 16:50:08
你是对的......当我说的时候,我打算说“会话时间”。现在,我使用给定用户配置文件使用的最后一个会话Id查询_ah_SESSION实体。如果会话没有过期(_expires>现在),我假设用户配置文件正在使用,我拒绝新的连接。我必须在生产中尝试它。 – 2012-03-24 08:08:05
这似乎是不受欢迎的行为 - 关闭笔记本电脑(未明确注销)并转至其台式计算机登录的用户将被拒绝。如果您真的必须自动注销其他任何会话,那就更好了。 – 2012-03-24 09:37:42