如何从JSESSIONID加载Java HttpSession?

问题描述 投票:15回答:3

我想通过JSESSIONID获得Java HttpSession。可能吗?如果是,如何?

java servlets httpsession
3个回答
32
投票

您需要自己使用Map将它们全部收集在Map中。

HttpSessionListener

只需将其注册到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>


也就是说,这是巨大气味。当然,解决actual功能需求的方法比这更好;)正如我在您的HttpSessionCollector.find(sessionId)中评论的:

这是您第二次问到一个在现实世界中永远不应该实践的问题。老实说,这一切都有味道。这是什么,您认为在服务器端获取与JSESSONID关联的HttpSession并在客户端获取JSESSIONID值的问题是“解决方案”?在新问题中对此进行详细说明,您将获得正确方法的答案。

认真对待。我们不是在取笑您,我们只是在尝试向您提供正确的方向,以避免由于安全漏洞和不良做法而使您的项目/ webapp崩溃,以及/或者您将被解雇。


2
投票

您可以按照BalusC的回答进行操作,但是这种功能的存在是不同用户之间的prima facie安全漏洞。您不应该在应用程序中构建类似的内容。


1
投票

否,API不允许这样做。

我想说的更多,但仅此而已。

© www.soinside.com 2019 - 2024. All rights reserved.