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

Win*_*ter 2 java session servlets jetty session-variables

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

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

Win*_*ter 7

我发现最好的解决方案是建立一个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;
}
Run Code Online (Sandbox Code Playgroud)

}

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

<web-app>
  <listener>
    <listener-class>[yourpack].HttpSessionCollector</listener-class>
  </listener>
...
</web-app>
Run Code Online (Sandbox Code Playgroud)

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

private Map<String, HttpSession> sessions;
sessions=HttpSessionCollector.getSessions(); 
Run Code Online (Sandbox Code Playgroud)