Tomcat 8.0.32 的奇怪行为:有时它会忽略 cookie。可以以某种方式调试吗?

Strange behaviour of Tomcat 8.0.32: sometimes it ignores cookies. Can it be somehow debugged?

我们的 Tomcat 8.0.32 安装在 Ubuntu 16.x 下有一个非常奇怪的问题。

这个问题开始是偶然发生的,并且一直存在到 tomcat 服务器重新启动(因此它在开始发生后可以重现)。

发生了什么,是 JS 应用程序的定时器发送的一些具有正确 cookie: JSESSIONID= 值的请求未正确处理:Tomcat 找不到 Session object 对于它(来自 Spring MVC 层意味着该用户未通过身份验证)。所有具有 相同 JSESSIONID 的请求都在这个损坏的请求之前发送,并且所有请求都在之后发送(同样具有相同的 session id 值)——它们都工作正常!

我们当然也看到该请求中的所有 headers 都是正确的(它们是我们的应用程序在某些 Filter 中打印出来的),但是 Session object 没有恢复。

所以基本上听起来像是在某些情况下 Tomcat 开始忽略从另一台服务器通过重定向发送的请求中的 JSESSIONID。再一次,这并不总是发生,只有在 web-application 生活一段时间后才会发生。

我不会在这里提供任何代码或配置设置。首先,因为它看起来像可怜的 Tomcat 问题,其次,因为配置是标准的(在 apt-install 之后开箱即用)。

我的问题是:我们如何配置Tomcat以记录与JSESSIONID处理相关的所有操作?就像它为给定的 ID 找到 session,或者没有等等。


更新:Tomcat 8.5.5 的更新版本永远不会发生这种情况。但由于某些原因,它无法在该特定服务器上更新。我目前的目标是收集有关此行为的证据,以确保它是一个错误,或者 tomcat 安装的一些奇怪的默认配置。

根据文档 https://tomcat.apache.org/tomcat-8.0-doc/logging.html 要为 Tomcat 的部分内部启用调试日志记录,您应该配置适当的记录器和适当的处理程序以使用 FINEST 或 ALL 级别。例如:

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