2016-05-31 2 views
0

Je travaille sur un cas d'utilisation où je dois rediriger des applications JSF déployées sur différents serveurs. Kinda connexion app à la webapp principale. Au départ, j'ai déployé ces deux applications sur le même serveur et les ai exécutées sous le même domaine (localhost).Redirigé vers la deuxième application mais jsessionid est la même que celle de la première application

Les deux applications sont: App A (un portail de connexion) et App B. L'application A s'exécute au niveau du contexte racine, par ex. http://localhost:8080/ et l'application B est au contexte /app par exemple. http://localhost:8080/app/. Lorsque je redirige (post-connexion) de l'application A vers l'application B via une demande de soumission simple POST, l'application B est lancée sous le même onglet du navigateur. En inspectant le cookie d'identifiant de session, je vois que l'App B, bien que faisant partie d'un déploiement différent, partage le même identifiant de session que celui de l'App A. Le cookie montre le même identifiant de session stocké sous le chemin /. Après le lancement de l'application B, je m'attendais à une nouvelle session. Est-ce normal, dois-je créer une nouvelle session explicitement? Ou est-ce que cela se passe parce que j'ai déployé les deux fichiers de guerre d'applications sur le même serveur localhost:8080?

+0

Avez-vous essayé quelque chose comme ceci: http://stackoverflow.com/questions/9436736/sharing-session-data-between-contexts-in-tomcat? – Jaumzera

+0

Et ceci: http://stackoverflow.com/questions/14712626/send-http-post-request-to-external-site-using-hform – Jaumzera

+0

Je suis capable de rediriger vers l'application B via le formulaire HTML de type POST '

. ..
'soumettre via un bouton JSF dans ma page JSF. Suite aux sessions, ce n'est pas que je veuille partager la session entre les applications App A et App B. Je le veux autrement. Je veux que chaque application ait sa propre session indépendante dans son propre contexte. Après avoir redirigé vers l'application B, je vois que l'application B a le même identifiant de session. J'ai besoin de démarrer l'application B dans une nouvelle session à la place. – user2918640

Répondre

0

Oui, le JSESSIONID sera identique car les deux applications sont servies à partir du même conteneur de servlet et interagissent avec la même instance de navigateur. Le même HTTPSession est utilisé par les deux applications. Pour une explication détaillée, consultez la section HTTPSession: How do servlets work? Instantiation, shared variables and multithreading. Par ailleurs, deux navigateurs distincts accéderaient à différentes sessions. Chacun accède au serveur avec un nouveau cookie de session et reçoit donc une nouvelle session HTTPSession du serveur. Étant donné que vous lancez les deux applications à partir du même navigateur (même si vous utilisez un onglet/une fenêtre distincts du même navigateur), le cookie de session reste le même et accède donc au même HTTPSession.