6

struts2、spring、hibernateを使用して開発されたWebアプリケーションがあります。

アプリケーションには、1人のユーザーが1つのブラウザーからのみログインできる機能が必要です。

ユーザーxがpc-1ブラウザffにログインしている場合、他の場所からログインすることはできません。

セッションマップを実装してセッションをグローバルマップに保存してみましたが、ユーザーがログオフして再度ログインしようとすると失敗します。

ユーザーがログオフせず、セッションがタイムアウトしない場合でも、マップはクリアされません。

この機能を実装するためのより良いアイデア。

ユーザーのログインを妨害したくはありませんが、ユーザーがクレジットを共有し、同じログインを持つ複数のユーザーが発生することを許可することで、ユーザーがアプリケーションを悪用することを望んでいません。

4

8 に答える 8

14

すでにSpringを使用しているので、アプリケーションをSpringSecurityと統合することをお勧めします。

Springセキュリティでは、ユーザーごとに同時に許可される最大セッションを定義できます。

<session-management>
        <concurrency-control max-sessions="1" />
</session-management>

有効なセッションを持つユーザーが再度ログインを試みるときに設定すると、最大同時アクセスが1に設定されていることがユーザーに通知されます。

詳細については、Spring Securityのリファレンスドキュメント(v3.2.xv4.2.x、またはv5.1.x )を参照してください。

春のセキュリティがあなたの選択肢ではない場合:

  1. SessionInterceptorセッションの有効性をチェックするを使用します。セッションが有効な場合は、ユーザーがすでにアプリケーションにログインしているかどうかをチェックします(このため、ログインが成功するたびにデータベースなどのどこかにセッションを維持する必要があります)。有効なログインが見つかった場合は、カスタムメッセージを含むログインページにユーザーを再度リダイレクトするか、すでに有効なセッションからログアウトしてから、再度ログインするようにユーザーをリダイレクトします。以前のセッションからログアウトすると、そのブラウザセッションでの後続のアクションは無効なセッションを処理する必要があります。

  2. アプリケーションでも使用Servletしている場合、Interceptorは機能しません。この場合、を使用して、Filter上記のInterceptorと同じ手順に従う必要があります。

于 2012-05-28T10:46:00.827 に答える
2

最善の解決策は、ユーザーが新しいセッションにログインするときに、他のセッションからユーザーをログオフすることです。多くの場合、ユーザーはブラウザーを閉じたときにログオフせず、他のウィンドウへのログインを制限することが落とし穴になります。

以前のユーザーセッションを自動的に閉じるのは良いことです。通常の使用では問題はありませんが、ログインとパスワードを共有する場合、2人で同時にアプリケーションを操作することはできません。

于 2012-05-28T10:24:44.210 に答える
1

ログイン時に、ユーザーデータとともに保存された生成されたID / Cookie(セッションIDで十分)をユーザーに提供します。ユーザーが古いID/Cookieを使用してサーバーにリクエストを送信した場合は、他の場所にログインしたと言います。

逆に、新しいログインの試行を禁止することには、経験したように、欠点があります。

于 2012-05-28T10:23:27.703 に答える
1

マップを作成します。ロギング時に、ユーザー ID がそのマップに存在するかどうかを確認します。存在しない場合は、ユーザー ID をマップに入れ、ログアウト時にそのユーザー ID を削除します。

于 2012-05-28T12:08:42.753 に答える
0

サーブレット コンテキストでユーザー スタックを維持します。これは Web コンテナー用のスタックになるためです。サーブレット コンテキストで見つかったユーザー名がログイン ページにリダイレクトする場合は、ユーザーがログインする前にチェックを実行します。

于 2014-03-03T13:47:55.580 に答える
0

正直に言うと、ユーザーを 1 回のログインに制限しなければならない理由をもう一度考えてみます。2 つの異なるブラウザーからログインできないようにするのは簡単ですが、提供された提案はどれも機能します。可能であれば、Spring Security オプションを実装するのが最も簡単です。ユーザーが同じブラウザーで 2 番目のタブを開くと、それらはすべて機能しなくなります。ブラウザ。これは、同じセッションの一部と見なされます。

于 2012-05-28T11:06:08.050 に答える