Hello !
Je ne suis pas sûr d'être au bon endroit, mais je ne trouve pas de solution à mon problème et je n'ai plus d'idée pour le résoudre.
Tout d'abord, voici une brève présentation de l'appli :
- il s'agit d'une webapp en Java/Spring MVC avec authentification Spring Security, développée en Java 6 (1.6.0_45-b06)
- elle tourne sur un Tomcat 6.0.44 sous Linux 2.6.18-407.el5
- en frontal, il y a un Apache 2.2.3 en mod_jk sous Linux 2.6.18-406.el5
Tout fonctionnait bien jusqu'à ce qu'on applique les mises à jour de sécurité des Linux (qui n'étaient pas à jour depuis plusieurs années...) et qu'on déchroote les serveurs (Apache et Tomcat étaient auparavant en environnement chrooté). On n'a pas fait de modification sur le WAR livré.
Depuis, on a des pertes de session assez souvent et qui empêchent certains client de se connecter :
- ils vont sur la page de login
- ils rentrent les infos login/password correctes
- ils sont redirigés vers la page d'accueil des utilisateurs authentifiés
- ils cliquent sur un lien mais sont redirigés sur la page de login comme s'ils n'étaient pas authentifiés
On n'arrive pas à reproduire le problème (peut-être parce qu'on passe par le réseau interne ?).
Voici un exemple de log Apache (front) et Tomcat (back) mis en forme pour une navigation OK :
15:46:55 : GET /appli/login.html
Réponse HTTP 200
Session créée : 0017E0E3227551B993664709C7FCDF5F
15:47:04 : POST /appli/j_spring_security_check
Réponse HTTP 302
Tentative de connexion avec l'utilisateur nom_user_ok
Session détruite : 0017E0E3227551B993664709C7FCDF5F
Session créée : 6C384D9B6845FF3786E2EFA04AB22ECB
Utilisateur authentifié : nom_user_ok
JSESSIONID : 0017E0E3227551B993664709C7FCDF5F
15:47:04 : GET /appli/home.html
Réponse HTTP 200
Redirection vers espace utilisateur
JSESSIONID : 6C384D9B6845FF3786E2EFA04AB22ECB
15:47:21 : GET /appli/secured/suiviActivite.html
Réponse HTTP 200
JSESSIONID : 6C384D9B6845FF3786E2EFA04AB22ECB
Et le même pour une navigation KO :
Et là, la redirection 302 se fait vers la page de login comme si l'utilisateur n'était pas authentifié.16:39:36 : GET /appli/login.html
Réponse HTTP 200
Session créée : E482653AE089448A7A39481B88365E54
16:42:10 : POST /appli/j_spring_security_check
Réponse HTTP 302
Tentative de connexion avec l'utilisateur nom_user_ko
Session détruite : C57B6BE21B277043F561FDC5CC7D081E
Session créée : 6B562D80B74EA5E61C23609738FF3EF0
Utilisateur authentifié : nom_user_ko
JSESSIONID : C57B6BE21B277043F561FDC5CC7D081E
16:42:10 : GET /appli/home.html
Réponse HTTP 200
Redirection vers espace utilisateur
Session créée : 71E49571623FEE6AF136EC16D298D7F2
JSESSIONID : 6B562D80B74EA5E61C23609738FF3EF0
16:42:19 : GET /appli/secured/suiviActivite.html
Réponse HTTP 302
JSESSIONID : 71E49571623FEE6AF136EC16D298D7F2
On remarque que l'ID de session change entre la page de login et le POST vers Spring Security. De plus on récréé une session sur la page home au lieu d'utiliser celle créée après le POST.
J'ai l'impression que les sessions sont perdues côté Apache et que ça n'a rien à voir avec l'applicatif ou les MAJ. On a remarqué beaucoup de TCP reset entre Apache et les clients.
Bref, je suis perdu. Merci déjà aux courageux qui auront lu jusqu'ici. Et ma reconnaissance éternelle au héros (ou à l'héroïne) qui trouvera une solution !
Partager