Как мне управлять сессиями в гибридной системе Ruby / GWT? - PullRequest
0 голосов
/ 24 февраля 2010

В настоящее время у меня есть система Ruby on Rails, и есть планы перенести ее на GWT. Прежде чем мы сделаем это, полномочия, которые хотят иметь подтверждение концепции с частью сайта, написанной на GWT, чтобы показать, что GWT может использовать и отображать текущий контент. Поток данных в части системы GWT выглядит следующим образом:

  1. Клиент отправляет вызов RPC на сервер GWT
  2. Сервер получает вызов RPC, а затем делает эквивалентный Ajax-запрос к системе Rails
  3. Сервер генерирует объект Java из результата запроса Ajax и передает его клиенту

Проблема, с которой я сейчас сталкиваюсь, заключается в управлении данными сеансов пользователей в обеих системах. У нас есть только 1 экземпляр Tomcat, и у него есть собственный тип сеансов, а затем наша система Ruby использует ActiveRecordStore для хранения данных сеансов в базе данных.

Проблема здесь в том, что когда система Tomcat взаимодействует с системой Ruby, если клиент GWT сделал запрос на вход в систему, последний пользователь, который войдет в систему из GWT, будет иметь все исходящие запросы Ajax, выполняемые в системе Rails как если они текущий пользователь, поскольку система Tomcat для Rails выглядит как один клиент.

В любом случае, как я могу сделать так, чтобы, если пользователь начал сеанс с системой Tomcat, система Ruby знала об этом и имела эквивалентный сеанс, так что, хотя сервер Tomcat для него был единственным клиентом, система Rails осознает тот факт, что с этим единственным клиентом связывается множество разных пользователей.

Ответы [ 2 ]

1 голос
/ 24 февраля 2010

Я думаю, что лучший способ решить эту проблему - использовать файлы cookie вместо базы данных для хранения сеанса. Rails поддерживает это изначально, на самом деле это уже некоторое время хранилище файлов cookie по умолчанию. Сам файл cookie подписан секретом сервера, чтобы предотвратить вмешательство пользователя. Я думаю, что реализация Rails использует Ruby-маршалинг для выгрузки / загрузки данных, поэтому вам, возможно, придется реализовать его в Java, или вы можете реализовать свой собственный менеджер cookie с обеих сторон, используя ту же идею.

Также можно просто использовать код Ruby из JRuby в вашем Java-приложении.

0 голосов
/ 24 февраля 2010

Я не знаю о RoR, но в большинстве веб-технологий сеансы поддерживаются с помощью файлов cookie. Если вы сохраняете куки (для данного пользователя) при нескольких вызовах с вашего Java-сервера на ваш экземпляр RoR, у вас все будет хорошо.

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