7

最近、プロジェクトで spring-session の使用を開始しました。これはレガシー アプリケーションであり、いくつかのHttpSessionListenerがあります。そのため、セッションが期限切れになるか、ユーザーが無効化すると、セッションsessionDestroyed(HttpSessionEvent se)メソッドが呼び出されます。メソッド onHttpSessionを呼び出すことで、破棄されようとしている を取得できます。getSession()HttpSessionEvent

春のセッションにも似たようなものがあります。Redis セッション リポジトリの実装はorg.springframework.session.events.SessionDestroyedEventイベントを発生させ、それにApplicationListenerを追加して何らかの処理を行うことができます。

しかし、これは私のニーズを満たしていません。

私が抱えている問題は、2 つの主な理由により、既存の HttpSessionListener を移行してこれらを使用するために使用できないことです。

  1. Spring Session によって発生したイベントは、破棄されようとしているセッション ID のみを提供します。セッション オブジェクト全体のコピーは提供されません。したがって、既存の HttpSessionListener に何らかの処理にいくつかの属性を使用するロジックがある場合、今はそれを行うことができません。

  2. セッションの作成時にイベントはありません。セッションの作成時にいくつかの作業を行う HttpSessionListener があります。

では、春のセッションで動作する HttpSessionListener で使用していた機能を取得するには、どのようなオプションが必要ですか?

4

2 に答える 2

8

Spring Session は、Spring セッション 1.1 から HttpSessionListener をサポートしています。

次のように、HttpSessionConfig ファイルで SessionEventHttpSessionListenerAdapter を Bean として構成する必要があります。

@Bean
public SessionEventHttpSessionListenerAdapter session() {
        List<HttpSessionListener> listeners = new ArrayList<HttpSessionListener>();
        listeners.add(new MyListener());
        return new SessionEventHttpSessionListenerAdapter(listeners);
}

上記のように、MyListener というカスタム HttpSessionListener を登録しました。これで、必要に応じてセッションの作成および破棄イベントを構成できます。

public class MyListener implements HttpSessionListener {

@Override
public void sessionCreated(HttpSessionEvent se) {
    System.out.println("CREATED--------");
}

@Override
public void sessionDestroyed(HttpSessionEvent se) {
    System.out.println("DELETED--------");
}
}

これが役立つかどうか教えてください!

于 2016-04-12T09:56:12.197 に答える
0

HttpSessionListener はまだサポートされていません。問題に投票してください

于 2015-07-24T23:31:14.813 に答える