我正在使用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