그래서 spring-session
프로젝트를 사용하고 있는데 HttpSessionManager
빈을 autowire 할 수 있는지 알고 싶습니까? 난 당신이 SessionRepository
와 함께 요청에서을 받고있는 users
의 예에서 볼 수 그러나봄에 HttpSessionManager Bean을 자동 작성하는 방법은 무엇입니까?
HttpSessionManager sessionManager =
(HttpSessionManager) req.getAttribute(HttpSessionManager.class.getName());
SessionRepository<Session> repo =
(SessionRepository<Session>) req.getAttribute(SessionRepository.class.getName());
, 나는 dB 층 근처에 서비스에서 액세스 할 내가 생각하지 않기 때문에 그것은이다 요구 사항을 서비스에 전달하는 좋은 설계 연습을 autowire하려고 시도했지만이 유형의 빈을 찾지 못했습니다. 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;
}
안녕하세요, Rob으로 세션 전략을 추가하려고 시도했지만 이제는 자동 배선 할 수 있지만 RequestStextHolder의 요청으로'sessionStrategy.getRequestedSessionId (request); '를 호출하면 항상 null이 반환됩니다. 'RequestContetHolder'가 쿠키를 전달하는지 잘 모르겠습니다 .... –
안녕하세요, 쿠키가 전달됩니다. 첫 번째 요청은 일부 sessionID와 함께 제공되지만 서버가 다시 시작 되었기 때문에 리포지토리에 세션이 없으므로 리포지토리를 사용하여 새 세션을 만들게됩니다 (내 메서드의 마지막 세 줄을보십시오). 그러나이 새로운 세션은 쿠키에 저장되지 않으므로 다음 세션 쿠키 요청 ID는 동일하며 저장소는 다시 세션을 찾을 수 없으며 다른 세션을 만듭니다. 'CookieHttpSessionStrategy'에서 새로 생성 된 세션을 설정하는 방법을 알고 있습니까? –