私は、Spring SecurityでGAE + GWTアプリケーションの認証レイヤーを実装しています。私の質問は、与えられたユーザープロファイルに対する同時セッションに関するものです。私は、同時に同じアカウントで2回ロギングするユーザーを禁止したい。App EngineとSpring Security:同時セッション
は、いくつかの研究の後、私は私が使って春のセキュリティでこれを行うことができることを発見した:
<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が受け取る
web.xmlの
sessionDestroyed()がHttpSessionListenerで呼び出されるたびに発生するイベントです。しかし、私が知る限り、App Engineは決してそれを呼びません。 issue about thisSpring SecurityとApp Engineでセッションの同時実行制限を実装する方法を教えてください。
まず、このコンテキストで「同時に」ということを定義する必要があります。 HTTPはリクエストベースであり、接続ベースではありません。ユーザーがサイトの使用を停止したときには通知できません。リクエストの送信を停止するだけです。 –
あなたは正しいです...私がそれを言ったとき、私は "セッション時間"を言うことを意図しました。今、私は_ah_SESSIONエンティティに、特定のユーザープロファイルで使用されている最後のセッションIDを照会しています。セッションが期限切れでない場合(_expires> now)、ユーザープロファイルが使用中であり、新しい接続を拒否したと想定します。私は生産で試してみる必要があります。 –
これは望ましくない動作のようです。ノートパソコンを明示的にログアウトせずに閉じ、ログインするためにデスクトップコンピュータにアクセスするユーザーは拒否されます。あなたが本当に必要ならば、他のセッションを自動的にログアウトする方がはるかに優れています。 –