GWT-Platform логин + управление сессией

Я новичок в gwt, создаю страницу входа с помощью gwt, и мне нужна помощь в управлении сеансом.

Все ответы, уже приведенные здесь, объясняют, как управлять сеансами на стороне сервера, мне нужно использовать сеанс на стороне клиента (сеанс браузера) точно так же, как с файлами JSP: session.setAttribute("UserName", username);

Может ли кто-нибудь дать четкий полный пример того, как это реализовать (помните, что я новичок в gwt). Я просмотрел этот учебник: http://code.google.com/p/google-web-toolkit-incubator/wiki/LoginSecurityFAQ И это мне не помогает, потому что не объясняет, как использовать сеанс браузера.

Спасибо.


person Igor Govorov    schedule 30.01.2012    source источник


Ответы (3)


"Мне нужно использовать сеанс на стороне клиента (сеанс браузера) точно так же, как с файлами JSP: session.setAttribute (" UserName ", username);"

Я хочу исправить ваше заблуждение. Ниже приводится не код на стороне браузера и не сеанс на стороне браузера. Это код на стороне сервера, управляющий информацией о сеансе на стороне сервера.

session.setAttribute("UserName", username);

Вы должны передать эту информацию о сеансе на стороне сервера клиенту в своем JSP, например:

<script>
var username = "<%=username%>";
</script>

Or,

<script>
var username = '<%=session.getAttribute("UserName")%>';
</script>

Как опытный программист JSP, вы должны понимать разделение между HTML / Javascript (сгенерированным JSP) и самим JSP. И из-за ограничений, с которыми вы столкнулись с JSP, вы обращаетесь к GWT.

Сходство между клиентом, созданным с помощью JSP, и клиентом, созданным с помощью GWT

  • Иногда (возможно, часто) программисты ошибочно принимают код на стороне сервера за код на стороне клиента, и наоборот. Как и ты.

  • Оба генерируют элементы javascript и HTML, которые отправляются клиенту для выполнения.

  • Все, что вы не можете сделать с javascript, созданным JSP, точно так же не может быть сделано с исходным кодом Java на стороне клиента GWT.

  • Все, что нужно сделать клиентскому коду, сгенерированному JSP, также необходимо сделать с помощью клиентского кода GWT.

  • Вы можете встроить информацию о сеансе в HTTP-заголовок, параметры POST или GET.

  • Вам нужен клиент для хранения информации о сеансе, в основном в виде файлов cookie.

  • При определенных обстоятельствах файл cookie jsessionid не устанавливается ответом сервера.

  • Ваш сервлет или его контейнер могут сгенерировать заголовок http set-cookie для JSESSIONID.

  • Сервлет может контролировать, когда создается заголовок cookie - благодаря request.getSession ().

.

Разница между клиентом, созданным с помощью JSP, и клиентом, созданным с помощью GWT

  • Клиент, сгенерированный JSP, обновляется при каждом запросе / ответе. Таким образом, вы можете передавать изменения и данные между клиентом и сервером для каждого запроса / ответа.

  • Клиент, созданный GWT, является постоянным для клиента и не обновляется. Именно по этой причине вы обращаетесь к GWT.

  • Эта разница в обновлении очень важна для понимания разницы в кодировании для GWT, чем для JSP.

  • Весь Java-код в JSP - это серверный код. В JSP нет клиентского кода, написанного на Java. Даже код Java, используемый для генерации HTML / javascript, является кодом на стороне сервера.

  • Весь клиентский код Java транслируется / компилируется в Javascript. Таким образом, код GWT Java на самом деле является кодом "на стороне компилятора".

.

Средства связи между клиент-сервером в GWT

  • Не забудьте использовать клиентский код класса Dictionary для передачи ваших статических настроек в приложение GWT через объекты Javascript, определенные в файле хостинга. Вы можете установить объекты javascript как переменные, и они будут доступны для чтения классу Dictionary после загрузки модуля gwt.

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

  • Однако не следует размещать идентификатор сеанса или информацию для аутентификации в файле хостинга. Потому что, даже если JSP динамически генерируется, он на самом деле статичен на постоянном клиенте GWT.

  • Вы можете использовать Window.Location.reload () для ненужного обновления вашего клиента GWT, на всякий случай, если вам все еще нравятся эффекты обновления JSP.

  • GWT-RPC

  • RequestBuilder

  • RequestFactory

  • REST и REST-RPC

  • Скрипт включает (для пересечения границ SLD-SOP)

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

Взгляните на http://google-web-toolkit.googlecode.com/svn/javadoc/2.4/com/google/gwt/http/client/RequestBuilder.html (или просмотрите его в своей личной копии документации GWT javadoc).

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

Вам не нужно полагаться на обычный сеанс JEE, чтобы «поддерживать сеанс». Вы можете создать свою собственную структуру токенов. Или используйте существующий, например OAuth или OpenId.

При различных условиях вы не получите файл cookie сеанса в ответе сервера.

При определенных обстоятельствах вам может потребоваться вообще отказаться от использования обычных сеансов JEE при написании приложения GWT.

Вам следует подумать об использовании REST или REST-RPC, поскольку я пытаюсь задокументировать это (со скоростью улитки) в: http://h2g2java.blessedgeek.com/2011/11/gwt-with-jax-rs-aka-rpcrest-part-0.html .

REST не требует от вас сохранения файла cookie сеанса. На мой взгляд, GWT лучше всего работает с REST-RPC.

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

person Blessed Geek    schedule 01.02.2012

Если вы имеете в виду управление экземпляром HttpSession на стороне клиента, вы просто не можете контролировать сеанс на стороне клиента, поскольку он находится на стороне сервера. Для управления сеансом вы должны вызывать серверную часть с помощью асинхронных обратных вызовов или другого метода. Прочтите это руководство: Обмен данными с сервером в GWT Реализация на стороне сервера вы можете установить любой атрибут для сеанса

HttpSession session = this.getThreadLocalRequest().getSession();
session.setAttribute("UserName", userName);

Или, если вы имеете в виду клиентские веб-сеансы, вы можете контролировать их с помощью Файлы cookie.

person Õzbek    schedule 30.01.2012

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

  1. Реализуйте GWT RPC, который пингует сервер, получает тайм-аут сеанса с сервера.
  2. Запустите таймер на стороне клиента, который работает на время тайм-аута.
  3. Сбрасывайте таймер каждый раз при обращении в службу поддержки.
person retrobrain    schedule 31.01.2012