Pergunta

Atualmente, tenho um sistema Ruby on Rails e há planos de portá -lo para o GWT. Antes de fazer isso, os poderes que desejam ter uma prova de conceito com parte do site sendo escrito no GWT para mostrar que o GWT pode usar e exibir o conteúdo atual. O fluxo de dados na parte GWT do sistema é o seguinte:

  1. O cliente envia uma chamada RPC para o servidor GWT
  2. O servidor recebe a chamada RPC e faz uma solicitação AJAX equivalente ao sistema Rails
  3. O servidor gera um objeto Java a partir do resultado da solicitação do Ajax, passa de volta ao cliente

O problema que estou me encontrando agora é gerenciar os dados da sessão do usuário nos dois sistemas. Temos apenas 1 instância do Tomcat, e isso tem seu próprio tipo de sessões e, em seguida, nosso sistema Ruby usa o ActiveRecordStore para armazenar dados de sessão no banco de dados.

O problema aqui é que, quando o sistema Tomcat fala com o sistema Ruby, se o cliente GWT fizer uma solicitação de login, o último usuário para fazer login no sistema GWT fez com que todas as solicitações de Ajax que estão sendo executadas no sistema Rails como se eles ' Re o usuário atual, já que o sistema Tomcat se parece com um único cliente para trilhos.

De qualquer forma, como posso fazer de tal forma que, se um usuário iniciar uma sessão com o sistema Tomcat, o sistema Ruby estará ciente disso e terá uma sessão equivalente para que, embora o servidor Tomcat seja um único cliente, o sistema Rails está ciente do fato de que muitos usuários diferentes estão se comunicando com esse cliente único.

Foi útil?

Solução

Eu acho que a melhor maneira de resolver isso seria usar cookies em vez de um banco de dados para armazenar a sessão. A Rails suporta isso nativamente, na verdade, é a loja de biscoitos padrão há algum tempo. O cookie em si é assinado por um segredo do servidor para evitar adulteração de usuários. Eu acho que a implementação do Rails usa o Ruby Marshaling para despejar/carregar os dados, para que você precise implementá -los em Java, ou pode implementar seu próprio gerenciador de cookies em ambos os lados usando a mesma ideia.

Também é possível usar apenas o código Ruby do Jruby no seu aplicativo Java.

Outras dicas

Não conheço o ROR, mas na maioria das sessões da Web Technologies são mantidas usando cookies. Se você preservar os cookies (para um determinado usuário) em várias chamadas do seu servidor Java para sua instância ROR, você deve ser bom.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top