所以我正在使用该spring-session
项目,我想知道是否可以自动装配HttpSessionManager
bean?我可以在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;
}