3

私の挨拶。

そんな質問があります。春のセキュリティで同じ IP アドレスからのログイン数を確認する方法はありますか? つまり、この現在の IP からログインしているユーザーがいる場合、別の資格情報 (別のブラウザーからなど) でログインできないことを彼に知らせ、ログイン試行を拒否したいと思います。

私はそれをグーグルで検索しようとしましたが、以下を見つけましたが、私が探しているものではありません:

Spring Security を使用した IP フィルター

Spring 3.1 での IP アドレスによる認証: 最もスマートな方法は?

4

3 に答える 3

3

AuthenticationSuccessHandler考えられる解決策は、カスタムのペアを実装することです。これによりLogoutSuccessHandler、(両方ともhttpリクエストにアクセスできる)、IPアドレスでキー設定されたログインユーザーの数を保持する同時マップを操作できます。次に、ログインリクエストをインターセプトし、そのマップをチェックし、IPアドレスからのユーザー数が制限を超えた場合にユーザーをリダイレクトするカスタムフィルターを追加します。

于 2013-02-27T13:16:19.847 に答える
1

箱から出してそれを行う方法はないと思います。実際にできることは、1 つのブラウザー インスタンスからの最大接続数を制限することです (同時セッションの章を参照)。

十分でない場合は、手動で行うことができます (Spring Security で慎重に設計された拡張ポイントのおかげです)。こちら で説明されているように、カスタム フィルターを定義します。セッション レジストリのエイリアスを宣言し、すべてのプリンシパルをロードします。通常、各プリンシパルは Authentication オブジェクトによって表されます。Authentication.getDetails() には IP アドレスが含まれる場合があります。重複を見つけて、ユーザーをエラー ページにリダイレクトします。お役に立てれば。

編集。セッション レジストリのプリンシパルは実際には org.springframework.security.core.userdetails.User のインスタンスであり、Authentication ではないため、機能しません。

于 2013-02-26T17:42:44.717 に答える
1

SessionAuthenticationStrategyは、ログイン試行を監視および制御するためのポイントです。同じユーザー名でログインされたセッションを制限するためのConcurrentSessionControlStrategyが既にありそれを拡張することも、そこから学ぶこともできます。SimpleUrlAuthenticationFailureHandlerのエラーページにリダイレクトまたは転送します。

/**
 * Strategy which handles concurrent session-control, in addition to the functionality provided by the base class.
 *
 * When invoked following an authentication, it will check whether the user in question should be allowed to proceed,
 * by comparing the number of sessions they already have active with the configured <tt>maximumSessions</tt> value.
 * The {@link SessionRegistry} is used as the source of data on authenticated users and session data.
 * <p>
 * If a user has reached the maximum number of permitted sessions, the behaviour depends on the
 * <tt>exceptionIfMaxExceeded</tt> property. The default behaviour is to expired the least recently used session, which
 * will be invalidated by the {@link ConcurrentSessionFilter} if accessed again. If <tt>exceptionIfMaxExceeded</tt> is
 * set to <tt>true</tt>, however, the user will be prevented from starting a new authenticated session.
 * <p>
 * This strategy can be injected into both the {@link SessionManagementFilter} and instances of
 * {@link AbstractAuthenticationProcessingFilter} (typically {@link UsernamePasswordAuthenticationFilter}).
 *
 * @author Luke Taylor
 * @since 3.0
 */
public class ConcurrentSessionControlStrategy extends SessionFixationProtectionStrategy
于 2013-03-12T16:51:39.940 に答える