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



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

此问题开始意外发生,并一直存在,直到 tomcat 服务器重新启动(因此在开始发生后是可重现的)。

发生的情况是,计时器从具有正确cookie: JSESSIONID=值的JS应用程序发送的某些请求没有得到正确处理:Tomcat找不到Session对象(从Spring MVC层中,这意味着该用户未经过身份验证)。在此损坏的请求之前发送具有相同JSESSIONID 的所有请求,以及在此中断的请求之后发送的所有请求(再次具有相同的会话 ID 值) - 它们都工作正常!

我们也肯定看到该请求中的所有标头都是正确的(它们由我们的应用程序在某些过滤器中打印出来),但Session对象没有恢复。

所以基本上听起来在某些情况下,Tomcat 开始忽略通过重定向从另一台服务器发送的请求中的 JSESSIONID。同样,这并不总是发生,只有在 Web 应用程序生命周期一段时间之后才会发生。

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

我的问题是:我们如何配置Tomcat以记录与JSESSIONID处理相关的所有操作?就像它找到给定ID的会话一样,或者没有,依此类推。


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

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

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

最新更新