web-dev-qa-db-ja.com

JSESSIONIDからJava HttpSessionをロードするにはどうすればよいですか?

JSESSIONIDでJava HttpSessionを取得したいのですが、可能ですか?はいの場合、どうすればよいですか?

15
Tushar Ahirrao

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値を取得することが「解決策」であると考える問題は何ですか?新しい質問でこれについて詳しく説明すると、正しい方法でそれを行う方法の答えが得られます。

真剣に受け止めてください。私たちはあなたをからかっていません、私たちはあなたのプロジェクト/ウェブアプリがセキュリティホールと悪い慣行のために壊れたり、あなたが解雇されるのを避けるために正しい方向にあなたを助けようとしています。

30
BalusC

いいえ、APIはこれを許可していません。

もっと言いたいのですが、それだけです。

2
skaffman

上記のように行うことができますが、そのような機能の存在は一応の異なるユーザー間のセキュリティ違反です。このようなものをアプリケーションに組み込むべきではありません。

1
user207421