2012-04-20 17 views
0

Spring Securityの同時セッション制御機能を使用する必要があります。ログインしたユーザーの以前のセッションを無効にする必要があります(シングルユーザーサインイン)。私はdao層(Hibernate)を呼び出すserice層を呼び出すServlet(Filter)を使ってアプリケーションによって既に実装されているので、認証と認可の機能は必要ありません。Spring Secuirty 3.1での認証と認可を伴わない同時セッション制御の方法

認証と承認なしで同時セッション制御を実装する方法を教えてください。

おかげで、 balachandar

+0

これは同時セッション制御ではありません。 CSCは、認証されたユーザーが2つのブラウザまたはコンピュータを使用しているため、アプリケーションに現在のセッションが2つある場合です。いつ現在のユーザーセッションを無効にしたいのですか? – sinuhepop

+0

私たちのアプリでは認証が行われているので、私はCSCのためだけにSpring Securityを使用しようとしました。以下の答えに従って、私はCSCを取得するためにSpring認証を使用する必要があることを理解しています。 – user1346346

答えて

0

一つのオプション(ハック)は、Springの事前認証機能を使用することであろう。つまり、フィルタで認証を実行し、ユーザ名であるリクエストオブジェクトに属性を設定します。リクエストは、その後、SpringとSpringに渡され、同時セッション制御機能が有効になります。

しかし実際には、フィルタに並行してセッション制御を実装するのが最も良い方法です。あなたは春のソースからいくつかのコードを "借りる"ことさえできます。

0

短い回答:あなたのアプリケーションが完全に春のセキュリティを使用するようにリファクタリングしない限りできません。

少し長い答え:Java EEコンテナのログイン(事前認証済み)を「偽造」できます。これは、あなたの春のセキュリティHTTP設定でAbstractPreAuthenticatedProcessingFilterから派生したログインフィルタを指定することを必要とします。たとえば、フィルタにリクエストをラップし、ヘッダ値を追加してRequestHeaderAuthenticationFilterを使用するか、独自のログインフィルタでリクエストに設定したリクエスト属性からプリンシパルをプルすることができます。 PreAuthenticatedAuthenticationProviderと組み合わせてください。

少し長めの答え#2:セッションの並行処理でスプリングセキュリティを設定し、すべてのURLに対してpermitAll(<intercept-url pattern="/*" access="permitAll" />)のアクセス権を設定する、すべての種類の設定を使用できます。しかし、あなたは自分のログインロジックにConcurrentSessionControlStrategyが何をしているのかを本質的に実装して、セッションをスプリングセキュリティSessionRegistryに登録する必要があります。あなたは、道に沿って他のいくつかの絡み目に遭遇する可能性が最も高いでしょう。春-セキュリティがサーブレットフィルタ(Spring MVCのようではない、サーブレット)に基づいて動作しますので、

注ただし、フィルタとして独自のログインをリファクタリングし、春のセキュリティフィルタの前にそれを配置する必要があることあなた自身の認証論理と春のセキュリティのいくつかの組み合わせを使用する場合、チェーン。

私は、スプリングセキュリティを利用してセッションを同時に制御したい場合は、カスタムサーブレットではなく、スプリングセキュリティの上に認証を構築する必要があります。フレームワークと戦わないで、それを意図どおりに使用してください。または、まったく使用しないでください。

+0

回答ありがとうございます。アドバイスとして、私はSpring Securityを認証用に使用します。私たちのアプリは(struts + spring + hibernate)を使って開発されているので、このリンクをたどってhttp://stackoverflow.com/questions/2683308/spring-security-3-database-authentication-with-hibernateを実装しています。私はこれを実装するためのいくつかの他のアプローチに従ってください知っている。ありがとう – user1346346

関連する問題