Работа с сеансами в приложении GWT

У меня есть приложение GWT, в основе которого лежит служба RPC. В настоящее время я пытаюсь реализовать поддержку пользователей, и единственный вопрос, который все еще остается, - это способ хранения данных сеанса.

Я сохраняю идентификатор сеанса, используя

getThreadLocalRequest().getSession().setAttribute("sid", "randomSIDgoeshere");

Итак, первый вопрос больше касается сервлетов Java, чем GWT.Гарантирует ли этот код, что в следующий раз, когда я сделаю такой вызов:

getThreadLocalRequest().getSession().getAttribute("sid");

, он будет либо пустым (в случае, если он будет вызван для пользователя, который еще не посетил фрагмент кода, где установлен атрибут SID), либо он будет точно такой же SID, который я уже сохранил для этого пользователя. Другими словами, являются ли эти 2 фрагмента кода индивидуальными для пользователя? (от пользователя Я имею в виду один браузер на одном компьютере)

Второй вопрос касается хранения сопоставлений между идентификаторами безопасности и некоторыми дополнительными данными, такими как идентификатор пользователя. На случай, если у меня есть такой код:

public class MyGwtServiceImpl extends RemoteServiceServlet implements MyGwtService {
  // SID to User ID mappings
  private final Map<String, String> sessions = 
    new HashMap<String, String>();
  ...
}

Гарантируется ли, что sessions всегда будет одним и тем же объектом для всех запросов, и его данные останутся «живыми», пока все приложение не будет завершено? (Например, Tomcat остановлен) Это нормальный подход или я должен сохранить все эти сопоставления в моей БД?

5
задан Andrey Agibalov 8 January 2012 в 20:22
поделиться