强制 tomcat 关闭时不使会话无效
Force tomcat not to invalidate session on shutdown
我的项目使用自定义会话失效机制。它需要发送带有失效原因的通知,例如 - 如果用户请求发生失效 - 失效原因是 USER_REQUEST,如果服务器关闭 - 则原因是 SHUTDOWN。
除了关闭情况外,所有工作都很好 - tomcat 本身使所有会话无效(至少 StandardManager 是这样)。
据我所知 - 我可以创建自己的管理器,它根本不会使会话无效:
public class HttpSessionManager extends StandardManager {
@Override
protected synchronized void stopInternal() throws LifecycleException {
setState(LifecycleState.STOPPING);
if (sessionIdGenerator instanceof Lifecycle) {
((Lifecycle) sessionIdGenerator).stop();
}
}
}
这个class 应该放在一些jar 文件中并放在tomcat/lib 文件夹中。
事实上,该解决方案需要与主要解决方案一起为 tomcat 分发额外的库,这并不好(交付过程变得复杂)
应该有另一种方法来做到这一点,或者我的解决方案可以以某种方式改进。
经过长时间深入的谷歌搜索这个问题 - 我可以说没有其他方法可以做到这一点。
我的项目使用自定义会话失效机制。它需要发送带有失效原因的通知,例如 - 如果用户请求发生失效 - 失效原因是 USER_REQUEST,如果服务器关闭 - 则原因是 SHUTDOWN。 除了关闭情况外,所有工作都很好 - tomcat 本身使所有会话无效(至少 StandardManager 是这样)。
据我所知 - 我可以创建自己的管理器,它根本不会使会话无效:
public class HttpSessionManager extends StandardManager {
@Override
protected synchronized void stopInternal() throws LifecycleException {
setState(LifecycleState.STOPPING);
if (sessionIdGenerator instanceof Lifecycle) {
((Lifecycle) sessionIdGenerator).stop();
}
}
}
这个class 应该放在一些jar 文件中并放在tomcat/lib 文件夹中。 事实上,该解决方案需要与主要解决方案一起为 tomcat 分发额外的库,这并不好(交付过程变得复杂)
应该有另一种方法来做到这一点,或者我的解决方案可以以某种方式改进。
经过长时间深入的谷歌搜索这个问题 - 我可以说没有其他方法可以做到这一点。