Question

J'ai actuellement un système Ruby on Rails, et il y a des plans pour le porter sur GWT. Avant de faire cela, les pouvoirs en place veulent avoir une preuve de concept avec une partie du site en cours d'écriture en GWT pour montrer que GWT peut utiliser et afficher le contenu en cours. Le flux de données dans la partie GWT du système est la suivante:

  1. Le client envoie un appel RPC au serveur GWT
  2. serveur reçoit un appel RPC, fait alors une demande équivalente Ajax au système Rails
  3. Server génère un objet Java à partir du résultat de la requête Ajax, il passe de nouveau au client

La question que je suis en cours d'exécution en est maintenant gérer les données de session utilisateur à travers les deux systèmes. Nous avons seulement 1 instance Tomcat, et qui a son propre type de sessions, et notre système Ruby utilise ActiveRecordStore pour stocker les données de session dans la base de données.

Le problème est que lorsque les pourparlers du système Tomcat avec le système Ruby, si le client GWT a fait une demande de connexion, le dernier utilisateur de se connecter à partir du système GWT a toutes les requêtes sortantes Ajax en cours d'exécution dans le système Rails comme si elles sont l'utilisateur actuel car le système Tomcat ressemble à un seul client à Rails.

De toute façon, comment puis-je faire de telle sorte que si un utilisateur commence une session avec le système Tomcat, le système Ruby sera au courant et avoir une session équivalente de telle sorte que même si le serveur Tomcat est un seul client à lui, le système Rails est conscient du fait que de nombreux utilisateurs différents communiquent avec elle à partir de ce seul client.

Était-ce utile?

La solution

Je pense que la meilleure façon de résoudre ce serait d'utiliser les cookies à la place d'une base de données pour stocker la session. Rails supporte nativement, en fait il est le magasin de cookies par défaut depuis un certain temps. Le cookie lui-même est signé par un secret de serveur pour empêcher toute manipulation de l'utilisateur. Je pense que la mise en œuvre Rails utilise Ruby marshaling pour vider / charger les données afin que vous pourriez avoir à mettre en œuvre en Java, ou vous pouvez implémenter votre propre gestionnaire de cookies sur les deux côtés en utilisant la même idée.

Il est également possible d'utiliser simplement le code Ruby de JRuby dans votre application Java.

Autres conseils

Je ne sais pas RoR, mais dans la plupart des technologies web les sessions sont conservées en utilisant des cookies. Si vous conservez les cookies (pour un utilisateur donné) sur plusieurs appels depuis votre serveur Java à votre instance de RoR, vous devriez être bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top