【问题标题】:Tomcat session deserialization fails with ClassNotFoundExceptionTomcat 会话反序列化失败并出现 ClassNotFoundException
【发布时间】:2017-09-02 00:34:15
【问题描述】:

我正在尝试让 Tomcat 在关闭时保留我的会话。我已经处理了我存储在会话中的所有内容都是可序列化的要求,并且当我在 Eclipse 下运行 Tomcat 时,这工作正常:当代码更改迫使 Eclipse 重新加载 webapp 时,会话现在仍然存在。

但是,当我尝试在独立的 Tomcat 中做同样的事情时,我遇到了问题。

我已取消注释 ${catalina.base}/conf/context.xml 中的 Manager 元素并将路径名属性设置为 ${catalina.base}/SESSIONS.ser,然后在关闭时,我看到了 SESSIONS。 ser 文件出现。到目前为止,一切顺利。

但是当我重启 Tomcat 时,出现在 catalina.out 中:

[...]
06-Apr-2017 13:39:52.570 SEVERE [localhost-startStop-1] org.apache.catalina.session.StandardManager.startInternal Exception loading sessions from persistent storage
 java.lang.ClassNotFoundException: com.mycompany.wtt.util.LogoutLogger
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1285)
[...]
06-Apr-2017 13:39:54.158 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive /data/tokken/apache-tomcat-8.5.12/webapps/wtt.war has finished in 1,134 ms
[...]

com.mycompany.wtt.util.LogoutLogger 类是 wtt.war webapp 的一部分,显然,Tomcat 在加载 webapp 之前尝试反序列化 webapp 的会话。看起来这意味着我不能在我的会话中放置特定于应用程序的类,这是一个大问题,因为我的一些逻辑依赖于能够做到这一点,并通过实现 javax.servlet.http 创建自定义行为.HttpSessionActivationListener。

有没有办法让 Tomcat 在加载 webapps 后反序列化会话?

版本:Tomcat 8.5.12、Java 1.8.0_121。

【问题讨论】:

    标签: tomcat


    【解决方案1】:

    原来问题在于在全局context.xml 中配置Manager,使用绝对路径。这意味着当 Tomcat 读取序列化会话时,它不知道它属于哪个 webapp,并且显然它只是尝试加载它(到它部署的第一个 webapp 中?),并且由于特定于应用程序的类而失败。

    我通过将 ${catalina.home}/conf/context.xml 改回原来的状态,将 Manager 元素注释掉,而是在 webapp 的 META-INF/context.xml 中添加了 <Manager pathname="${catalina.home}/sessions/wtt.ser"> 来让它工作。

    请注意,如果您简单地说pathname="SESSIONS.ser",您的会话将在服务器重新启动后仍然存在,但它们将无法在应用程序重新部署后继续存在,因为后者会破坏应用程序的工作目录,而这是存储具有相对路径名的会话的位置。说pathname="${catalina.home}/sessions/wtt.ser" 可以避免这种情况(但请确保事先存在您希望将会话写入的任何目录,因为 Tomcat 不会为您创建它)。

    【讨论】:

      猜你喜欢
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      相关资源
      最近更新 更多