您可以通过实现HttpSessionListener
. 此示例显示如何实现会话计数器,但您也可以通过将单个会话存储在上下文范围的集合中来保留对各个会话的引用。然后,您可以从管理页面访问会话,检查它们的属性并使其中一些无效。这篇文章也可能有有用的信息。
编辑:这是一个示例实现(未经测试):
public class MySessionListener implements HttpSessionListener {
static public Map<String, HttpSession> getSessionMap(ServletContext appContext) {
Map<String, HttpSession> sessionMap = (Map<String, HttpSession>) appContext.getAttribute("globalSessionMap");
if (sessionMap == null) {
sessionMap = new ConcurrentHashMap<String, HttpSession>();
appContext.setAttribute("globalSessionMap", sessionMap);
}
return sessionMap;
}
@Override
public void sessionCreated(HttpSessionEvent event) {
Map<String, HttpSession> sessionMap = getSessionMap(event.getSession().getServletContext());
sessionMap.put(event.getSession().getId(), event.getSession());
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
Map<String, HttpSession> sessionMap = getSessionMap(event.getSession().getServletContext());
sessionMap.remove(event.getSession().getId());
}
}
然后,您可以从任何 servlet 访问会话映射:
Collection<HttpSession> sessions = MySessionListener.getSessionMap(getServletContext()).values();