是否有任何方法可以在servlet中获取jetty上的所有有效会话密钥值?

我有一个带有两个不同servlet的jetty容器,然后调用A和B.在特殊情况下,qr代码代码出现在servlet A中(用户已经登录并正在使用他的桌面)和用户使用他的移动设备阅读此qr代码并将其重定向到其移动设备上的servlet B. 这里的问题是我无法保持他的会话。

QR码带来用户会话密钥,但我无法validation此会话是否有效。 我想知道是否有任何特殊的方法来请求jetty上的有效会话密钥,因为两个servlet都在同一个服务器上。

我发现最好的解决方案是建立一个HttpSessionListener :),我们必须覆盖一些方法:

public class HttpSessionCollector implements HttpSessionListener { private static final Map sessions = new HashMap(); @Override public void sessionCreated(HttpSessionEvent event) { HttpSession session = event.getSession(); sessions.put(session.getId(), session); } @Override public void sessionDestroyed(HttpSessionEvent event) { sessions.remove(event.getSession().getId()); } public static HttpSession find(String sessionId) { return sessions.get(sessionId); } public static Map getSessions() { return sessions; } 

}

然后在/WEB-INF/web.xml上设置监听器

   [yourpack].HttpSessionCollector  ...  

现在我们可以在包内的任何地方调用HttpSessionCollector。 例如,为了获得我们只需要的所有有效会话:

 private Map sessions; sessions=HttpSessionCollector.getSessions();