我们在 Ubuntu 16.x 下安装的 Tomcat 8.0.32 有一个非常奇怪的问题。
这个问题开始是偶然发生的,并且一直存在,直到tomcat服务器重新启动(因此它开始发生后可以重现)。
发生的情况是,定时器从 JS 应用程序发送的一些具有正确 cookie: JSESSIONID=
值的请求未得到正确处理:Tomcat 找不到 Session
对象对于它(从 Spring MVC
层来看,这意味着该用户未经身份验证)。在这个损坏的请求之前发送具有相同 JSESSIONID 的所有请求,以及在此之后发送的所有请求(再次使用相同的 session ID 值) - 它们都工作正常!
我们当然也看到该请求中的所有 header 都是正确的(它们由我们的应用程序在某些过滤器中打印出来),但 Session
对象未恢复。
所以基本上听起来在某些情况下 Tomcat 开始忽略通过从另一台服务器重定向发送的请求中的 JSESSIONID。再说一次,这种情况并不总是发生,只有在网络应用程序运行一段时间后才会发生。
我不会在这里提供任何代码或配置设置。首先,因为它看起来像是糟糕的 Tomcat 问题,其次,因为配置是标准的(apt-install 后开箱即用)。
我的问题是:我们如何配置 Tomcat 才能记录与 JSESSIONID 处理相关的所有操作?就像它会找到给定 ID 的 session ,或者找不到,等等。
UPD:对于较新版本的 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
关于java - Tomcat 8.0.32 : sometimes it ignores cookies. 的奇怪行为是否可以以某种方式进行调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46240868/