Spring многопользовательское приложение переопределяет сессию - PullRequest
0 голосов
/ 25 апреля 2011

Я разрабатываю свое веб-приложение с помощью Spring MVC 2.5.6, и мне нужна помощь для нескольких пользовательских сессий. Заголовок моего приложения показывает зарегистрированного пользователя.

На моем компьютере я открываю два браузера (без вкладок):

  • В первом случае я захожу в приложение с помощью user1 и вхожу. В заголовке появляется user1 .
  • Во втором я захожу с user2 и продолжаю. В заголовке появляется user2 .

Затем я переключаюсь на первый браузер, отправляю операцию контроллеру, и когда приложение отображается снова, в заголовке появляется user2 , и это неправильно, потому что я вошел в систему с user1 .

Итак, мои вопросы:

  • SecurityContextHolder.getContext().getAuthentication().getName(), возможно, не является правильным способом получить зарегистрированного пользователя со многими пользователями, потому что это синглтон (не так ли?). Как я мог это сделать?
  • Эта неправильная ситуация также происходит с объектом сеанса, поэтому данные user1 , хранящиеся в объекте сеанса (управляемые с помощью request.getSession().setAttribute(...) и request.getSession.getAttribute(...)), переопределяются данными user2 .
  • В этом вопросе StackOverflow, Обработка идентификатора сеанса с помощью Spring , предлагается, чтобы идентификатор сеанса управлялся для разделения данных. Должен ли я вручную управлять данными каждого пользователя с идентификатором сеанса внутри моего приложения? Как я могу получить идентификатор сеанса?

В общих чертах моя проблема заключается в работе с несколькими пользователями / сессиями.

Любая помощь будет принята с благодарностью. Заранее спасибо. С наилучшими пожеланиями

1 Ответ

2 голосов
/ 25 апреля 2011

На моем компьютере я открываю два браузера (без вкладок):

  • В первом я захожу в приложение с user1 и захожу. В заголовке появляется user1.
  • Во втором я захожу с user2 и продолжаю. В шапке появляется user2.

Затем я переключаюсь на первый браузер, отправляю операцию контроллеру, и когда приложение отображается снова, в заголовке появляется user2, и это неправильно, потому что я вошел в систему с user1.

При нормальной реализации сеанса это нормальное поведение, если клиент запускает два окна или вкладки одного и того же браузера на одном компьютере, когда они совместно используют сеанс.

Если вы откроете приложение в IE и Firefox, они не будут совместно использовать сеанс, и все будет работать правильно.

Я не верю, что есть способ заставить браузер прекратить совместное использование сеанса между окнами, поэтому, если вам нужно, чтобы они действовали независимо, вам нужно по сути создать свой собственный механизм сеанса, вероятно, с использованием скрытых полей или некоторых такой взлом, а не куки или перезапись URL, который использует обычный механизм.

Было бы лучше просто принять ситуацию. Сообщите пользователю, когда он откроет второе окно и подключится к вашему приложению, что он уже вошел в систему, и не разрешайте другой вход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...