J'ai une exigence d'avoir à exécuter plusieurs serveurs Tomcat dans une seule boîte physique. Lors de l'accès à ceux-ci à partir d'un navigateur, lorsque l'utilisateur bascule entre les applications, il en résulte la déconnexion de l'utilisateur qui accède précédemment à l'application. Cela est dû au conflit de cookies JSESSIONID.
Une solution possible consiste à exécuter chaque application dans un contexte différent. Malheureusement, mes applications ne fonctionneront pas dans la configuration du chemin de contexte car aucune des ressources n'est accessible avec request.getContextPath () ajouté avant.
Cela me laisse de changer le nom du cookie JSESSIONID pour résoudre le conflit. Y a-t-il un moyen de faire cela? Si oui, comment?
J'espère que je suis clair en posant ma question.
Remarque: toutes mes applications s'exécutent sur des ports différents sur la même machine.
Tout est beaucoup plus simple avec Servlet API 3.0.
Vous pouvez maintenant le configurer dans votre web.xml:
<session-config>
<cookie-config>
<name>MY_JSESSIONID_YAHOOOOOO</name>
</cookie-config>
</session-config>
C'est ça!
Ce qui suit fonctionne pour moi sur Tomcat7 dans le fichier context.xml:
<Context path="/yourApp" sessionCookieName="custom_session_id">
En utilisant deux propriétés système suivantes, cela peut être réalisé facilement.
Toute valeur peut être transmise aux propriétés ci-dessus pour modifier les valeurs par défaut.
Ici détails complets avec un exemple de script se trouve.
Tomcat 7 le déplace d'org.Apache.catalina.SESSION_COOKIE_NAME vers un attribut de la configuration principale <Context>. http://Tomcat.Apache.org/migration-7.html#Session_manager_configuration
Je ne pense pas que ce soit possible à ce stade - voir https://issues.Apache.org/bugzilla/show_bug.cgi?id=42419
La dernière entrée indique "Cela a été corrigé dans 5.5.x et sera inclus dans 5.5.28" - qui est la prochaine version de point - 5.5.27 est la version actuelle.
Vous n'êtes pas sûr à 100% que cela fonctionne, mais vous pouvez utiliser l'attribut jvmRoute
, qui est généralement utilisé dans un environnement à charge équilibrée/en cluster pour que les équilibreurs de charge puissent distinguer les nœuds. Exemple:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
Cela finira par générer une valeur JSESSIONID qui ressemble à "ABCDEF123456.node1".