0

私はプロジェクトを使用していますが、 Beanspring-sessionを自動配線できるかどうかを知りたいですか? HttpSessionManager私はusersあなたがリクエストからそれを取得している例で見ることができますSessionRepository:

    HttpSessionManager sessionManager =
            (HttpSessionManager) req.getAttribute(HttpSessionManager.class.getName());
    SessionRepository<Session> repo =
            (SessionRepository<Session>) req.getAttribute(SessionRepository.class.getName());

ただし、dbレイヤーの近くのサービスからアクセスしたいのですが、要求をサービスに渡すのは良い設計慣行ではないと思うので、自動配線しようとしましたが、このBeanが見つかりませんタイプ。SessionRepository設定で Bean を定義したので、問題なく自動配線できます。も使用して取得しようとしましたRequestContextHolderが、getSessionIdsメソッドは常に空のマップを返すため、常に新しいセッションを作成することになります。これが私の方法全体です:

@Override
public Session getCurrentSession() {

    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();

    HttpSessionManager sessionManager =
        (HttpSessionManager) request.getAttribute(HttpSessionManager.class.getName());

    final Map<String, String> sessionIds = sessionManager.getSessionIds(request);

    if (sessionIds != null) {

        for (Map.Entry<String, String> e : sessionIds.entrySet()) {
            final Session session = sessionRepository.getSession(e.getValue());
            if (session != null) {
                return session;
            }
        }
    }

    Session session = sessionRepository.createSession();

    sessionRepository.save(session);

    return session;
}
4

1 に答える 1