以编程方式使Java Web应用程序重新启动的所有会话失效

时间:2015-04-09 19:57:51

标签: java session servlets

我需要一种方法来禁用可以捆绑在应用程序内的tomcat重启的会话持久性。

所以我想出了最好的方法就是以编程方式。

问题是我找不到简单地将sessionids集合作为应用程序范围的可序列化bean的属性并迭代它们,从而检索(从持久存储中恢复并反序列化)对应于每个sessionid的会话对象的方法摧毁它。

相反,似乎唯一的解决方案是保持相同的集合,但使用整个会话对象。

我怎样才能避免这种情况,并且仍然能够在应用程序重启时或者在任何时候以独立于servlet容器的方式销毁所有会话对象?

1 个答案:

答案 0 :(得分:0)

这就是我最终做的事情:

我确实保留了一个带有可序列化属性的可序列化应用程序作用域bean:一个Hashtable,其键是会话ID,并且值是创建的时间戳(我使用Long而不是Timestamp来最小化内存占用)。

我正在使用HttpSessionListener实现来填充Hashtable并消除其sessionCreated和sessionDestroyed方法上的过期会话。

bean有一个@PostConstruct方法,它获取该表并将所有值设置为0.

这是令人讨厌的部分:

每次我想使用会话对象时(例如,在request.getSession()之后),我必须“手动”调用一个方法来检查此表上的值是否为0以及会话是否到期并创建一个新的。

必须有更好的方法,或者不应该这样做的原因。如果你知道一个,请告诉我。