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

Java 是否有任何方法可以在servlet中获取jetty上的所有有效会话密钥值?,java,session,servlets,jetty,session-variables,Java,Session,Servlets,Jetty,Session Variables,我有一个带有两个不同servlet的jetty容器,让我们调用a和B。 在特殊情况下,servlet a中会出现qr码(用户已登录并正在使用其桌面),用户通过其移动设备读取该qr码,并在其移动设备上重定向servlet B。这里的问题是我不能继续他的治疗 二维码带来了用户会话密钥,但我无法验证此会话是否有效。我想知道是否有任何特殊的方法来请求jetty上的有效会话密钥,因为这两个servlet位于同一个服务器中 我找到的最佳解决方案是建立一个HttpSessionListener:) 为此,我们

我有一个带有两个不同servlet的jetty容器,让我们调用a和B。 在特殊情况下,servlet a中会出现qr码(用户已登录并正在使用其桌面),用户通过其移动设备读取该qr码,并在其移动设备上重定向servlet B。这里的问题是我不能继续他的治疗


二维码带来了用户会话密钥,但我无法验证此会话是否有效。我想知道是否有任何特殊的方法来请求jetty上的有效会话密钥,因为这两个servlet位于同一个服务器中

我找到的最佳解决方案是建立一个HttpSessionListener:) 为此,我们必须覆盖一些方法:

public class HttpSessionCollector implements HttpSessionListener {
private static final Map<String, HttpSession> sessions = new HashMap<String, HttpSession>();

@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<String, HttpSession> getSessions() {
    return sessions;
}
公共类HttpSessionCollector实现HttpSessionListener{
私有静态最终映射会话=new HashMap();
@凌驾
已创建公共无效会话(HttpSessionEvent事件){
HttpSession session=event.getSession();
sessions.put(session.getId(),session);
}
@凌驾
public void sessionDestroyed(HttpSessionEvent事件){
移除(event.getSession().getId());
}
公共静态HttpSession查找(字符串sessionId){
return sessions.get(sessionId);
}
公共静态映射getSessions(){
返回会议;
}
}

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

<web-app>
  <listener>
    <listener-class>[yourpack].HttpSessionCollector</listener-class>
  </listener>
...
</web-app>

[yourpack].HttpSessionCollector
...
现在我们可以在包中的任何地方调用HttpSessionCollector。 e、 g.为了获得所有有效会话,我们只需:

private Map<String, HttpSession> sessions;
sessions=HttpSessionCollector.getSessions(); 
私有映射会话;
sessions=HttpSessionCollector.getSessions();

概念上相当不错。出于规模的考虑,进一步的改进可能是使用不在内存中的东西(redis或mongodb商店可能会做得很好)。同步也可能成为一个问题