簡體   English   中英

是否有任何方法可以在servlet中獲取碼頭上所有有效的會話密鑰值?

[英]Is there any method to obtain in a servlet all valid session keys values on jetty?

我有一個帶有兩個不同Servlet的碼頭容器,讓我們依次調用A和B。在特殊情況下,一個QR代碼出現在Servlet A中(用戶已經登錄並且正在使用其桌面),並且用戶使用移動設備讀取此qr代碼,並將其重定向到其移動設備上的servletB。 這里的問題是我不能繼續他的會議。

QR碼帶有用戶會話密鑰,但是我無法驗證此會話是否有效。 我想知道是否有任何特殊方法來請求碼頭上的有效會話密鑰,因為兩個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;
}

}

然后在/WEB-INF/web.xml上設置偵聽器

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

現在,我們可以在包內的任何位置調用HttpSessionCollector。 例如,為了獲得所有有效的會話,我們只需要:

private Map<String, HttpSession> sessions;
sessions=HttpSessionCollector.getSessions(); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM