如何从JSESSIONID加载Java HttpSession?

时间:2010-06-22 10:52:11

标签: java servlets httpsession

我想通过JSESSIONID获取Java HttpSession。可能吗?如果是,怎么样?

3 个答案:

答案 0 :(得分:29)

您需要自己使用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


那就是说,这是一种巨大的气味。肯定有更好的方法来解决实际功能要求而不是这个;)正如我在你的follow-up question中所评论的那样:

  

这是你第二次问一个在现实世界中永远不应该实践的问题。老实说,这一切都闻起来。这是什么问题,您认为在服务器端获取与HttpSession相关联的JS {{1}}并在客户端获取JSESSIONID值的问题是“解决方案”?在一个新问题中详细说明这一点,你将得到正确方法的答案。

认真对待。我们不是在取笑你,我们只是试图帮助你朝着正确的方向前进,以避免因安全漏洞和不良做法而导致您的项目/网络应用程序崩溃和/或您将被解雇。

答案 1 :(得分:2)

不,API不允许这样做。

我会说更多,但这就是它的全部内容。

答案 2 :(得分:1)

您可以按上述方式执行此操作,但此类工具的存在是不同用户之间的表面安全漏洞。你不应该在你的应用程序中构建这样的东西。