web-dev-qa-db-fra.com

Modification du nom du cookie JSESSIONID

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.

52
ramanr

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!

57
walv

Ce qui suit fonctionne pour moi sur Tomcat7 dans le fichier context.xml:

<Context path="/yourApp" sessionCookieName="custom_session_id">
15
Joseph Lust

En utilisant deux propriétés système suivantes, cela peut être réalisé facilement.

  • org.Apache.catalina.SESSION_COOKIE_NAME
  • org.Apache.catalina.SESSION_PARAMETER_NAME

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.

14
user489641

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

12
timkingman

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.

4
Martin

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".

Lien de documentation .

2
matt b