11

私はこのスレッドを参照していましたが、 Rob Winch(Spring Security Lead) による最後の 2 番目の投稿で、彼は sessionRegisty にアクセスできると述べています。

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

したがって、HttpSessionEventPublisherフィルターを登録web.xmlし、セクションで上記の設定を指定します<http>。私はこれを追加しません:

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

私のクラスでは、次のように sessionRegistry のインスタンスを挿入します。

@Autowired
private SessionRegistry sessionRegistry

これは、ユーザーのセッションを見つけようとしている方法です。

List<SessionInformation> userSessions = sessionRegistry.getAllSessions(username,false);
        for (SessionInformation userSession : userSessions){
            userSession.expireNow();
        }

プリンシパルは、ユーザーのユーザー名です。デバッグ時には、sessionRegistry変数principalssessionids変数は空です。ここで何か間違ったことをしていますか、それとも krams のブログで言及されている手順がこれを行う唯一の方法ですか?

4

4 に答える 4

2

session-registry-aliasをsession-registry-refに変更し、デフォルトのimplを定義した場合にのみ機能しました。

<security:session-management>
    <security:concurrency-control max-sessions="10" session-registry-ref="sessionRegistry"/>
</security:session-management>

 <bean id="sessionRegistry" class="org.springframework.security.core.session.SessionRegistryImpl"/>
于 2012-11-12T04:47:08.210 に答える
2

sessionRegistry を自動配線できます。何も問題はありません。SessionInformation私はそれを使用してセッションを追跡し、登録しましたUserPrincipal

于 2012-08-03T07:42:06.093 に答える
0

コメントが長くなりましたので、お答えします。

  1. Spring Security デバッグをオンにします (log4j.properties行に追加log4j.logger.org.springframework.security=DEBUG)。これは、問題が何であるかを示すことができる多くの便利な情報をデバッグが出力するため、このような問題の標準的な手順である必要があります。

  2. ロギング後にpublic void registerNewSession(String sessionId, Object principal)内部のメソッドが呼び出された場合、デバッグできますか? そうでない場合は、正しく設定されていSessionRegistryImplないことを意味します。HttpSessionEventPublisher

  3. 授業で使っ@Autowired private SessionRegistry sessionRegistry;ていますよね?

  4. 編集:レジストリにプリンシパルがあるかどうかを確認できますか?

    List<Object> userSessions = sessionRegistry.getAllPrincipals();
    

    ここで、Objects は使用するプリンシパル インスタンスです。

于 2012-08-03T09:18:17.607 に答える