Я использую весеннюю сессию, и мне это очень нравится. Однако я думаю, что что-то упускаю. В моем приложении поток выглядит следующим образом: 1) Пользователь запрашивает HomepageController
, и этот контроллер пытается поместить атрибут в запрос:
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
final String sessionIds = sessionStrategy.getRequestedSessionId(request);
if (sessionIds != null) {
final ExpiringSession session = sessionRepository.getSession(sessionIds);
if (session != null) {
session.setAttribute("attr", "value");
sessionRepository.save(session);
model.addAttribute("session", session);
}
}
Как видите, он попытается получить идентификатор сеанса из запроса-куки, и если в репозитории есть сеанс с этим идентификатором, используйте его (добавьте атрибут). Это идеально, но только после второго запроса. Почему? Потому что если я перезапущу сервер, то кука останется со старым значением, и тогда первый запрос не найдет сессию в репозитории. После подтверждения ответа файл cookie будет обновлен, поэтому второй запрос будет корректным. И вот вопрос: что не так с моей логикой и как нужно развивать приложение, чтобы поддерживать и первый запрос?
Кстати, вот пример приложения, демонстрирующего проблему:
HttpSession
, а не свою сложную логику. - person M. Deinum   schedule 02.05.2015SessionService
, который работает сSessionRepository
), и выглядит некрасиво работать сHttpServletSession
рядом с db-слоем - это выглядит лучше, когда вы работаете сSessionRepository
Session
интерфейс. - person Petar Tahchiev   schedule 02.05.2015HttpSession
и помещать туда вещи, сеанс будет сохранен для вас фреймворком. Похоже, вы пытаетесь обойти Spring Session вместо того, чтобы принять его. Я бы даже осмелился сказать, что ваш контроллер слишком сложный. - person M. Deinum   schedule 02.05.2015