【问题标题】:Strange behaviour of Tomcat 8.0.32: sometimes it ignores cookies. Can it be somehow debugged?Tomcat 8.0.32 的奇怪行为:有时它会忽略 cookie。它可以以某种方式调试吗?
【发布时间】:2018-02-24 17:20:35
【问题描述】:

我们在 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 安装的一些奇怪的默认配置。

【问题讨论】:

  • 我对 Tomcat HTTP 请求的日志记录不太熟悉。通常,我的 Java 服务器位于反向代理(如 nginx)后面。首先看看 Tomcat 能做什么,如果还不够,可以考虑在两者之间放置 nginx(或其他反向代理)来提供日志记录。
  • 或者,你的意思是 nginx 代理,一直在 Tomcat 中,可以以某种方式处理会话?
  • 你会把 Tomcat 放在 nginx 后面,而不是反过来。 Tomcat 必须处理自己的会话。尽管通过将 nginx 放在中间,您可以使用它来增强日志记录。不过我不是这方面的专家。

标签: java session tomcat cookies tomcat8


【解决方案1】:

根据文档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

【讨论】:

  • 嗨@AntonMalyshev。谢谢你的回复。我应该把这个配置放在哪里?进入我的应用程序的 log4j.properties 或其他地方?
  • ${catalina.base}/conf/logging.propertiesWEB-INF/classes/logging.properties
猜你喜欢
  • 2017-10-19
  • 2017-12-12
  • 2011-02-10
  • 2016-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多