背景Glassfish/J2EE:複数のユーザーログインを防ぐためのユーザー認証を構成するための軽量な方法?
我々はGlassfishのサーバを使用して、ユーザーが一度だけ認証するために、複数のWebアプリケーションにアクセスすることができているように、有効シングルサインオン(SSO)とそれを構成しています。各WebアプリケーションはFORMベースのログイン(* j_security_check *)を指定しており、開発目的のためにファイルレルムを使用しています。これはうまくいきます。
Glassfishは、サーバー(および他のWebアプリケーション)の認証済み状態を維持するためのセッション(ユーザーが認証されたWebアプリケーションのパスにスコープされています)とCookie(JSESSIONIDSSO)の両方を生成します。
ユーザーWebアプリケーションセッションでSession.invalidate()を呼び出すことで、ユーザーの再認証を強制できます。また、SSO Cookieも無効になります。すべてこれはうまく動作します。
PROBLEM
私たちは、複数の同時ログインを持っていることからユーザーを防止するための方法を探しています。一度作成したユーザーのセッション(またはSSO Cookie)をキャプチャし、ユーザーの名前でキーを付けてマップに保存すると、ログインページにアクセスするたびに確認でき、存在する場合は古いセッションが無効になります。
理想的には、ユーザー名(またはプリンシパルオブジェクト)と作成されたセッションの両方にアクセスできるコンテキストで、認証後のイベントを処理したいと考えています。 (私はHttpSessionListenerを見ていましたが、リンクされているユーザーにはアクセスできません)。
私はいくつかの理由が考えられますので、これをやってみるか、まったく新しいフレームワークをアプリに導入することを試みています(例:Spring Security)。 (そしてうまくいけば、これはJAASモジュール全体を実装する必要はありません...)