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

StackOverflow https://stackoverflow.com/questions/2327752

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top