Spring Security の同時セッション制御機能を使用する必要があります。ログインしたユーザー (シングル ユーザー サインイン) の以前のセッションを無効にする必要があります。daoレイヤー(Hibernate)を呼び出すサービスレイヤーを呼び出すサーブレット(フィルター)を使用するアプリケーションで既に実装されているため、認証と承認の機能は必要ありません。
認証と承認なしで同時セッション制御を実装する方法を教えてください。
ありがとう、バラチャンダル
Spring Security の同時セッション制御機能を使用する必要があります。ログインしたユーザー (シングル ユーザー サインイン) の以前のセッションを無効にする必要があります。daoレイヤー(Hibernate)を呼び出すサービスレイヤーを呼び出すサーブレット(フィルター)を使用するアプリケーションで既に実装されているため、認証と承認の機能は必要ありません。
認証と承認なしで同時セッション制御を実装する方法を教えてください。
ありがとう、バラチャンダル
簡単な答え: spring-security を完全に使用するようにアプリケーションをリファクタリングしない限り、できません。
もう少し長い回答: Java EE コンテナーのログイン (事前認証済み) を「偽造」できます。AbstractPreAuthenticatedProcessingFilter
これには、春のセキュリティ http 構成から派生した login-filter を指定する必要があります。たとえば、リクエストをフィルタでラップしてヘッダー値を追加しRequestHeaderAuthenticationFilter
、と組み合わせるPreAuthenticatedAuthenticationProvider
。
少し長い答え #2: 通常どおりセッション同時実行で spring-security を構成するが、すべての URL に対して permitAll へのアクセスを設定する allow-all 種類のセットアップを使用できます (is <intercept-url pattern="/*" access="permitAll" />
)。ConcurrentSessionControlStrategy
ただし、 Spring security に登録されたセッションを取得するには、基本的に独自のログイン ロジックで が行うことを実装する必要がありますSessionRegistry
。途中で他のいくつかの障害に遭遇する可能性が最も高いです。
ただし、spring-security はサーブレットフィルター(Spring MVC のようなサーブレットではない) に基づいて動作するため、独自のログインをフィルターとしてリファクタリングし、それをチェーン内のスプリング セキュリティ フィルターの前に配置する必要があることに注意してください。独自の認証ロジックと春のセキュリティの組み合わせを使用します。
私のアドバイスは、同時セッション制御に spring-security を活用したい場合は、カスタムサーブレットではなく、spring-security の上に認証を構築する必要があります。フレームワークと戦わないで、意図したとおりに使用してください。または、まったく使用しないでください。
1 つのオプション (ハック) は、Spring の事前認証機能を使用することです。つまり、フィルターで認証を実行し、ユーザー名である要求オブジェクトに属性を設定します。次に、リクエストはSpringとSpringに渡され、そこで同時セッション制御機能が有効になります。
しかし、実際には、フィルターに同時セッション制御を実装するのが最善の選択肢です。春のソースからいくつかのコードを「借りる」ことさえできます。