Как сохраненить сессии между rest-запросами в spring boot?

Добрый вечер всем, возникла проблема с сохранением сессий между запросами. Условно у меня имеются два метода(в разных контроллерах), обрабатывающие post-запросы. Первый метод login, сохраняющий сессию пользователя, второй метод обращается к сессии, но тут и возникла проблема. Прежде всего следует отметить, что сессия создается и это видно как по методу request.getSession().getAttribute("name"), написанного непосредственно после сохранения значения в сессию, так и в Mongo Compass, к слову бд для хранения сессий выбрана - Mongo, но при сравнении id этих двух сессий - выясняется, что эти сессии совершенно разные. Перепробовал все методы из статей, аналогичных проблем на Stack Overflow и тп.
  • Вопрос задан
  • 835 просмотров
Решения вопроса 2
@Akela_wolf
Extreme Programmer
Сессии работают следующим образом: при создании сессии сервер отсылает заголовок Set-Cookie браузеру в котором сохраняет значение идентификатора сессии (JSESSIONID). При последующих запросах браузер посылает "печеньку" обратно серверу и тот, получив идентификатор, может восстановить сессию из своего хранилища. Если "печеньки" заблокированы, то возможно передать jsessionid как query param запроса. Но это уже требует дополнительных телодвижений на стороне клиента.

Так как вы упоминаете REST, то предположу использование XmlHttpRequest в браузере (напрямую или опосредованно через какую-то библиотеку), который не посылает заголовок Cookie по умолчанию.

Поэтому вариантом решения может быть отправка идентификатора сессии явным образом как query param с именем jsessionid.

Однако, использование сессии в REST запросах - в целом не очень хорошая практика, так как REST предполагается быть stateless. А в случае сессии у вас появляется состояние на стороне сервера. Если сессия нужна только для аутентификации клиента, то посмотрите на использование токенов, таких как JWT, которые позволяют решить эту проблему без наличия сессии на стороне сервера.
Ответ написан
Комментировать
@NikBr_9 Автор вопроса
...
Для всех кто будет использовать @RestController с сессиями, не забудьте добавить:
@Autowired
 public HttpSession httpSession;
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы