假设我有一个运行的基于Java的Web应用程序,其中包含0个或更多HttpSession与之关联的有效对象.我想要一种方法来访问当前的有效HttpSession对象列表.我在想我可以实现一个HttpSessionListener并使用它来追加存储在应用程序范围的属性中的会话ID值列表,但随后会因会话失效而更新列表并且谁知道是什么其他.
在我开始烘焙自己的解决方案之前,我想我应该问一个问题:
servlet API是否提供了一些访问完整的非失效会话对象列表的方法?
我使用Tomcat 6.x作为我的Web应用程序容器和MyFaces 1.2.x(JSF)库.
解决方案
我遵循类似于BalusC在这些现有问题中讨论的方法:
我按SessionData类修改了实现HttpSessionBindingListener.当绑定事件发生时,对象将从所有SessionData对象的集合中添加或删除自身.
@Override
public void valueBound(HttpSessionBindingEvent event) {
// Get my custom application-scoped attribute
ApplicationData applicationData = getApplicationData();
// Get the set of all SessionData objects and add myself to it
Set<SessionData> activeSessions = applicationData.getActiveSessions();
if (!activeSessions.contains(this)) {
activeSessions.add(this);
}
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
HttpSession session = event.getSession();
ApplicationData applicationData = getApplicationData();
Set<SessionData> activeSessions …Run Code Online (Sandbox Code Playgroud)