JSESSIONIDでJava HttpSession
を取得したいのですが、可能ですか?はいの場合、どうすればよいですか?
Map
を使用して、それらすべてを 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);
}
}
_
次のように_web.xml
_に登録するだけで実行できます。
_<listener>
<listener-class>com.example.HttpSessionCollector</listener-class>
</listener>
_
次に、必要な場所でHttpSessionCollector.find(sessionId)
を実行して、問題のHttpSession
を取得します。
とはいえ、これは巨大な匂いです。これよりも実際の機能要件を解決するためのより良い方法が確かにあります;)私があなたの フォローアップ質問 でコメントしたように:
現実の世界では決して実践してはならない質問をしたのはこれが2回目です。正直言って、これはすべてにおいがします。サーバー側でJSESSONIDに関連付けられた
HttpSession
を取得し、クライアント側でJSESSIONID値を取得することが「解決策」であると考える問題は何ですか?新しい質問でこれについて詳しく説明すると、正しい方法でそれを行う方法の答えが得られます。
真剣に受け止めてください。私たちはあなたをからかっていません、私たちはあなたのプロジェクト/ウェブアプリがセキュリティホールと悪い慣行のために壊れたり、あなたが解雇されるのを避けるために正しい方向にあなたを助けようとしています。
いいえ、APIはこれを許可していません。
もっと言いたいのですが、それだけです。
上記のように行うことができますが、そのような機能の存在は一応の異なるユーザー間のセキュリティ違反です。このようなものをアプリケーションに組み込むべきではありません。