2011-04-20 2 views
2

J'ai délibérément écrit des applications 'session aware' au lieu des applications 'shared shared'. Voici un scénario:applications prenant en charge la session

J'ai une application Web (WA1) déployée dans une instance de Tomcat. Supposons que toutes les applications sont déployées à la racine et que nous ne traitons pas de contextes. Cette application permet aux utilisateurs de se connecter, faire leur chose sur le site et se déconnecter.

Il existe une autre application Web (WA2) sur une autre instance de tomcat. Cette application gère un service, disons, il lit des fichiers et des flux vers le navigateur. WA1 sert une page qui a un lien qui lie à WA2.

Maintenant, j'ai une session valide dans WA1 qui identifie qui est l'utilisateur et si la session est une session valide. Je voudrais que WA2 le sache avant d'honorer la requête de la page servie par WA1.

Quelle est la meilleure façon de gérer cela? J'ai exclu les sessions de partage (à moins que ce soit le meilleur, veuillez expliquer), parce que WA1 pourrait être lui-même équilibré et WA2 pourrait être équilibré, et garder les sessions partagées sur deux instances de charge équilibrée de l'application peut devenir écrasante. Je penche pour un mécanisme de 'jeton' où WA1 crée un jeton associé à chaque session et le met à la disposition de WA2 à partir de n'importe quelle page servie depuis WA1. WA2 va d'abord inspecter le jeton, et voir s'il s'agit d'un jeton valide (plusieurs façons de le faire: A: faire un appel de service web à WA1 pour demander si jeton est un jeton de session valide. B: WA1 persiste à DB ou système de fichiers et WA2 cherche à partir de là ..), et si elle est valide, alors honorer la demande. Le problème ici serait de s'assurer que le jeton est invalidé lorsqu'une session dans WA1 expire.

Je voudrais savoir si cette approche est assez bonne, ou y at-il de meilleurs moyens de le faire?

Merci

M. Plutôt

Répondre

1

Par défaut, l'API Servlet utilise un cookie, généralement nommé jsessionid, pour stocker un ID de session dans chaque navigateur. Ensuite, le navigateur transmet le cookie au serveur à chaque requête. Tant que les deux instances de Tomcat se trouvent dans le même domaine, elles doivent avoir accès à ce cookie. À moins que je ne manque quelque chose, c'est juste une question de test pour ce cookie dans la deuxième application.

Mise à jour: Même si chaque instance de tomcat s'exécute dans un domaine différent, ils peuvent toujours partager ces cookies en appelant la méthode setDomain(String domainPattern) de la classe Cookie.

+0

Merci elekwent, Donc, fondamentalement, il est similaire à la méthode 'token' décrite, sauf qu'au lieu d'utiliser token + DB/web-service, jsessionId + cookie/browser est utilisé pour valider une session/jeton valide. Pour l'instant, nous aurons les deux instances de tomcat sur le même domaine, mais j'aimerais savoir si WA2 pourrait aussi être sur un domaine différent. –

+0

Oui, similaire lorsque vous considérez le résultat final qui doit déterminer si une session valide existe. Il n'y a pas de partage de session en cours ici, ou tout autre comportement complexe. WA2 a seulement besoin de vérifier le cookie jsessionid pour savoir si une session existe entre le navigateur de l'utilisateur et n'importe quel serveur de votre domaine. Utilisez la méthode setDomain() du cookie pour accorder l'accès à WA2 lorsqu'il passe à un autre domaine. – elekwent

+0

Si nous allons avec la route des cookies, dans WA2, nous pouvons lire le cookie et obtenir le jsessionid. Comment peut-on garantir que le jsessionid est un jsessionid valide généré par une session WA1 valide.Comme je crois, les cookies peuvent être modifiés, et si un utilisateur crée un cookie avec une valeur fictive pour jessionid, et WA2 peut trouver un cookie avec une valeur 'a', cela ne garantit pas qu'il s'agit d'une session WA1 valide. WA2 devra encore interroger quelque part pour authentifier la valeur de jsessionid, ce qui signifie que WA1 devra soit répondre à une demande de WA2, soit persister quelque part où WA2 peut lire. –

Questions connexes