2013-06-14 93 views
5

私のアプリケーションでは、ユーザーを削除できる管理者がいます。したがって、管理セッションからユーザーを削除すると、削除されたユーザーが自動的にログアウトする必要があります。 私は削除したユーザーのセッションIDを知っていますが、セッションIDを使用してセッションを無効にする方法はわかりません。春に別のユーザーのセッションを破棄します

私は何か好きです:invalidate(SessionId);

いずれにしても可能ですか?私は可能なフィルタを使用して、要求ごとにデータベースをチェックすることが可能だと思うが、私はすべてのhttprequestのDBを確認する必要はありません別の方法はありますか?

ありがとうございました。 :D

答えて

3

私は、SessionRegistryクラスを持つSpring Securityインフラストラクチャを使用したソリューションがあると思います。

あなたはweb.xmlHttpSessionEventPublisherを登録する必要があります:あなたの春の設定で

<listener> 
    <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> 
</listener> 

を、SessionRegistryを宣言。あなたの管理コンソールで

<bean id="sessionRegistry" 
    class="org.springframework.security.core.session.SessionRegistryImpl" /> 

は、ユーザーのSessionInformationを取得し、expireNowを呼び出すためにSessionRegistryを使用する必要があります。ユーザの次のリクエストで、サーブレットフィルタはHttpSessionを期限切れにする必要があります。 SessionInformationのjavadocは、どのように動作するかについていくつかの説明があります。

これが役立つかどうかをお知らせください。 @LaurentGによって提案されたものと一緒に

+0

私は問題を抱えています。* sessionRegistry.registerNewSession(String session、Object principal)を呼び出してセッションを登録しました。*ユーザーを削除するとセッションが正しく取得され、* sessionInformation.expireSession()それは働かなかった。それがまだ動作しているユーザーのセッション – Josema

+1

[docs](http://static.springsource.org/spring-security/site/docs/3.0.x/reference/session-mgmt.html)をもう一度読み、私はあなたのSpringセキュリティ設定の ''セクションに ''を追加しなければならないと思います。私はそれが助けてくれることを願う – LaurentG

3
// to end a session of a user: 
List<SessionInformation> sessions = sessionRegistryImpl.getAllSessions(user, false); 
sessionRegistryImpl.getSessionInformation(sessions.get(0).getSessionId()).expireNow(); 

// note: you can get all users and their corresponding session Ids: 
List<Object> users = sessionRegistryImpl.getAllPrincipals(); 
List<String> sessionIds = new ArrayList<>(users.size()); 

for (Object user: users) { 
    List<SessionInformation> sessions = sessionRegistryImpl.getAllSessions(user, false); 
    sessionIds.add(sessions.get(0).getSessionId()); 
} 
0

、次はあなたの春の設定ファイルに追加する必要があります

<session-management> 
    <concurrency-control session-registry-alias="sessionRegistry" /> 
</session-management> 

それを動作させるために。また、@zygimantusの答えは、セッションデータにアクセスするために使用することができます。

関連する問題