2

2つの異なるサーブレットを含む桟橋コンテナがあります。次にAとBを呼び出します。特別な場合に、qrコードコードがサーブレットA(ユーザーはすでにログインしていてデスクトップを使用しています)とユーザーのモバイルデバイスを使用して表示されますこのqrコードを読み取り、モバイルデバイス上のサーブレットBにリダイレクトされます。ここでの問題は、私が彼のセッションを続けることができないということです。

QRコードはユーザーセッションキーをもたらしますが、このセッションが有効かどうかを確認する方法がありません。両方のサーブレットが同じサーバーにあるため、桟橋で有効なセッションキーを要求する特別な方法があるかどうかを知りたいです。

4

1 に答える 1

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;
}

}

次に、リスナーを/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(); 
于 2012-05-27T16:37:23.693 に答える