Управление сессиями на стороне клиента GWT

Я создаю приложение GWT, где у меня есть 3 RootPanels, одна из которых содержит панель входа (userId и пароль). Мое приложение - это одностраничное приложение. Для входа в систему идентификатор пользователя и пароль меняются с сервера через RPC, и, если комбинация верна, загружается следующая Panel, которая является моим основным приложением. Поскольку это одностраничное приложение, я хочу знать, как я должен осуществлять управление сессиями в этом приложении.

3 ответа

Решение

Несколько способов, которые я использовал в своих различных приложениях GWT

  • Проверка учетных данных пользователя на каждом RPC (клиент / сервер). Следуйте стандартному программированию (очевидная задержка в каждом RPC: - /)
  • С помощьюThread Local (предпочтительный способ)

getThreadLocalRequest().getSession().setAttribute("user", user);//and get

  • Используйте Cookies, чтобы позволить веб-браузеру пользователя "запомнить" логин.
  • Несколько других, которые я не использую. Например: локальное хранилище (not secured, dependent)

Одним из больших преимуществ AJAX-приложения является возможность работать без сеанса на стороне сервера. Насколько я помню, Рэй Райан упомянул также службы без сохранения состояния в презентации ввода-вывода Google "Лучшие практики для разработки приложений GWT" на Google I/O 2009.

Сеанс на стороне сервера имеет некоторые последствия:

  • сеанс может истечь
  • это требует много ресурсов
  • это усложняет балансировку нагрузки

Даже если у вас есть управление сессиями на стороне сервера, вы должны проверять учетные данные пользователя при каждом вызове сервера! Вы никогда не можете быть уверены, что ваше приложение всегда вызывает вашу службу!

Поэтому я лично не использую управление сессиями на стороне сервера в своем приложении GWT.

Вместо этого вы можете сделать что-то вроде этого:

После успешного входа в систему сохраните некоторую информацию, такую ​​как идентификатор пользователя, время входа, IP-адрес и т. Д. В таблице базы данных. Используйте ключ записи, зашифруйте его и отправьте этот токен клиенту. Все ваши сервисы на стороне сервера должны требовать ввода идентификатора пользователя и токена. Прежде чем вы начнете заниматься бизнес-логикой, вы должны проверить учетные данные пользователя. Расшифруйте токен и прочитайте запись из таблицы базы данных.

  • запись не найдена -> пользователь не вошел в систему
  • недопустимый ключ базы данных -> пользователь не вошел в систему
  • сравните сохраненный идентификатор пользователя с идентификатором, который вы получаете при вызове сервера -> не равно -> пользователь не вошел в систему
  • сравнить сохраненный IP-адрес с адресом сервера -> не равно -> пользователь не вошел в систему

и так далее.

Кроме того, вы всегда должны использовать SSL!

Вы можете настроить сеанс в своих приложениях web.xml и написать фильтр сеанса, который будет фильтровать весь или конкретный запрос на сервер, где вы сможете проверить, истек ли ваш сеанс или действителен. Если срок его действия истек, вы можете перенаправить пользователя на любую нужную страницу.

Другие вопросы по тегам