私はプロジェクトを使用していますが、 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;
}