2017-09-15 1 views
2

Il y a un problème très étrange avec notre Tomcat 8.0.32 installé sous Ubuntu 16.x.Comportement étrange de Tomcat 8.0.32: parfois, il ignore les cookies. Peut-il être en quelque sorte débogué?

Ce problème commence à se produire accidentellement et existe jusqu'au redémarrage du serveur Tomcat (donc il est reproductible après qu'il a commencé à se produire).

Qu'est-ce qui se passe, est que certaines des demandes envoyer par minuterie de l'application JS avec une bonne valeur cookie: JSESSIONID= sont mal traitées: le Tomcat ne peut pas trouver Session objet pour elle (de Spring MVC couche, cela signifie que l'utilisateur n'est pas authentifié). Toutes les demandes avec le même JSESSIONID étant envoyé avant cette demande cassée, et toutes les demandes étant envoyées après (encore avec la même valeur de l'identifiant de session) - ils fonctionnent tous très bien!

Nous voyons également que tous les en-têtes de cette requête sont corrects (ils sont imprimés par notre application dans certains filtres), mais l'objet Session n'est pas restauré.

Donc, il semble que dans certaines circonstances, Tomcat commence à ignorer JSESSIONID à partir des demandes envoyées via la redirection d'un autre serveur. Et encore, cela n'arrive pas toujours, seulement après un certain temps de la vie de l'application web.

Je ne fournirai aucun code ici ni aucun paramètre de configuration. Tout d'abord, parce que cela ressemble au problème de Tomcat, d'autre part, parce que la configuration est standard (hors de la boîte après apt-install).

Ma question est: comment pouvons-nous configurer Tomcat afin de consigner toutes les opérations liées au traitement JSESSIONID? Comme ça, il trouve une session pour l'ID donné, ou ne l'est pas et ainsi de suite.


UPD: Cela ne se produit jamais avec une version plus récente de Tomcat 8.5.5. Mais pour certaines raisons, il ne peut pas être mis à jour sur ce serveur particulier. Mon but actuel est de rassembler des preuves à propos de ce comportement pour être sûr qu'il s'agit d'un bug, ou d'une étrange configuration par défaut de Tomcat.

+0

Je ne suis pas très familier avec la journalisation des requêtes HTTP Tomcat. Généralement, j'ai mes serveurs Java derrière un proxy inverse tel que nginx. Regardez d'abord ce que Tomcat peut faire et si cela ne suffit pas, pensez à mettre nginx (ou un autre proxy inverse) entre les deux pour fournir la journalisation. – toongeorges

+0

Ou, voulez-vous dire que le proxy nginx, en restant derrière le Tomcat, peut en quelque sorte traiter les sessions? – Andremoniy

+0

Vous mettriez le Tomcat derrière le nginx, et non l'inverse. Tomcat doit traiter ses propres sessions. Bien qu'en mettant nginx au milieu, vous pouvez l'utiliser pour améliorer la journalisation. Je ne suis pas un expert en la matière cependant. – toongeorges

Répondre

2

Selon les docs https://tomcat.apache.org/tomcat-8.0-doc/logging.html pour activer la journalisation de débogage pour une partie des composants internes de Tomcat, vous devez configurer à la fois l'enregistreur approprié (s) et le gestionnaire approprié (s) d'utiliser le FINEST ou tous les niveaux. par exemple:

org.apache.catalina.session.level=ALL 
java.util.logging.ConsoleHandler.level=ALL 
+0

Bonjour @AntonMalyshev. Merci pour votre réponse. Où dois-je placer ces configurations? Dans log4j.properties de ma demande ou ailleurs? – Andremoniy

+0

'$ {catalina.base}/conf/logging.properties' ou' WEB-INF/classes/logging.properties' –