2011-04-05 2 views
3

Nous avons un serveur Tomcat pour une boutique en ligne et nous devons transférer l'utilisateur vers un autre serveur (sécurisé) lorsqu'il se connecte. Voici une explication détaillée:Comment transférer une session d'un serveur Tomcat à un autre?

1) Nous avons deux serveurs Tomcat: un « régulier » (HTTP) et un sécurisé (HTTPS)

2) les utilisateurs visitent d'abord le serveur régulier

3) Quand ils se connectent, nous avons besoin pour obtenir leur journal dans les données, ainsi que les informations sur quelle page ils étaient actuellement (ou essayaient de voir), passez-la au serveur sécurisé et faites la connexion; par exemple, un utilisateur non connecté voit une liste de produits, clique sur 'ACHETER' et une fenêtre contextuelle s'affiche pour demander à l'utilisateur de se connecter; l'utilisateur saisit ses identifiants et ceux-ci, ainsi que les informations sur le produit qu'il souhaite acheter, sont transmis au serveur sécurisé; le serveur sécurisé les reçoit, effectue la connexion et affiche le produit demandé à l'utilisateur

Comment cela a-t-il pu être fait? S'il vous plaît noter les points suivants:

1) Nous avons essayé de le faire avec les cookies, mais nous avons décidé de ne pas aller dans ce sens

2) Persistant la session à une base de données et ayant le serveur sécurisé le chercher n'est également pas une option

Y a-t-il d'autres moyens? Nous avons pensé à créer un objet puis à le passer en paramètre HTTP POST, mais je ne suis pas sûr de savoir comment cela pourrait être fait (on m'a donné la tâche de le finir).

Pour ce que ça vaut, les technologies que nous utilisons sont le serveur Tomcat, Wicket, Spring, iBatis et MySQL.

Merci à l'avance :)

+0

Puis-je vous demander pourquoi vous avez décidé de ne pas utiliser les cookies? Chaque site que j'ai utilisé pour suivre les sessions utilisateur sur plusieurs serveurs Web a utilisé des cookies. Vous définissez un cookie avec un identifiant unique pour l'utilisateur et si le cookie existe, recherchez votre session utilisateur dans le db. Lequel ta seconde note tue. – Speck

+0

Le problème est dans la deuxième note. Nous ne souhaitons pas utiliser la base de données, nous devons donc enregistrer le nom d'utilisateur, le mot de passe et les informations sur ce qu'il a cliqué dans un cookie (ou plusieurs d'entre eux). Garder les noms d'utilisateur et les mots de passe dans les cookies est un risque pour la sécurité ... A moins que ceux-ci ne puissent être sécurisés? – Zoolok

+2

Ne conservez pas le mot de passe du nom d'utilisateur dans le cookie.Mettez un identifiant de session unique dans le cookie qui est associé à la fois à l'adresse IP de l'utilisateur et au compte utilisateur. Faites également expirer le cookie avec sa session de navigateur. – Speck

Répondre

0

Je ne sais pas si je me fais l'essentiel de ce que vous voulez, mais vous pourriez avoir être une page « pop-up » servi de l'application sécurisée à une URL protégée. Cela provoquerait l'authentification sur le serveur sécurisé et vous pourriez partir de là. Par exemple, si la page du produit non sécurisé est sur www.domain.com/browse/id1, le bouton "acheter" ouvrira une fenêtre pop-up à secure.domain.com/buy/id1, provoquant l'authentification lors de la transmission du produit. id sur l'URL.

+0

Merci pour votre aide, les gens :) J'ai trouvé que Wicket a une RedirectPage. Je le crée en passant l'URL du serveur sécurisé au constructeur, puis en redirectToInterceptPage (redirectPage), mais le problème est que quoi que je fasse, je ne peux pas ajouter de paramètres/propriétés à la page redirectPage. Je n'arrive pas à transmettre ni RequestParameters ni PageParameters à redirectPage, puis au serveur sécurisé (ils finissent tous par être null). – Zoolok

2

Si vous souhaitez partager la session entre les différentes instances de Tomcat, vous pouvez les configurer pour travailler en tant que cluster avec réplication de session: http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html

Ensuite, vous pouvez configurer un serveur Apache HTTP fonctionne comme un équilibreur de charge, assurez-vous que les requêtes HTTP vont au serveur 1 et que les requêtes HTTPS vont au serveur 2.

Mais, vous pouvez également avoir une seule instance Tomcat (ou N instances identiques) configurée pour gérer HTTP et HTTPS, et assurer l'accès sécurisé avec la norme (...<transport-guarantee>CONFIDENTIAL</transport-guarantee>... dans web.xml) ou la configuration spécifique au framework.

+0

Salut, moi encore :) Désolé de ne pas répondre plus tôt, j'ai été un peu occupé. Les choses que je dois ajouter sont les suivantes: les cookies ne peuvent pas être utilisés, car le serveur non sécurisé et le serveur sécurisé seront sur des domaines différents. L'idée de Speck était ma préférée, et j'ai commencé à l'implémenter, mais comme il utilise des cookies, je ne peux pas l'utiliser. Donc, au lieu de cela, je vais essayer de définir le formulaire de connexion sur la boutique en ligne pour soumettre son contenu directement sur le serveur sécurisé. Pour être honnête, je ne suis pas sûr de savoir comment faire cela. Ce que j'ai essayé de faire jusqu'ici était d '"injecter" tous les paramètres dont j'avais besoin dans le RequestCycle ... – Zoolok

+0

... Pour cela, j'ai étendu RedirectRequestTarget et essayé d'insérer les paramètres de la requête dans la Demande elle-même. J'ai également remarqué que vous ne pouvez ajouter que des cookies à la réponse. Quoi qu'il en soit, pour raccourcir l'histoire, les paramètres sont tous perdus une fois que j'atteins le serveur sécurisé. Si quelqu'un a une idée à ce sujet, encore une fois, j'aimerais l'entendre :) – Zoolok

Questions connexes