如何从JSESSIONID加载Java HttpSession?

2022-09-03 00:03:12

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


答案 1

您基本上需要自己使用HttpSessionListenerMap中手动收集它们。

@WebListener
public class HttpSessionCollector implements HttpSessionListener {
    private static final Map<String, HttpSession> SESSIONS = new ConcurrentHashMap<>();

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

然后,任何你想做的事情只是为了得到有问题的。HttpSessionCollector.find(sessionId)HttpSession


也就是说,这是一个巨大的气味。当然,有比这更好的方法来解决实际的功能需求;)正如我在你的后续问题中评论的那样:

这是你第二次问一个在现实世界中永远不应该练习的问题。老实说,这一切都闻起来了。这是什么,您认为在服务器端获取与JSESSONID相关联并在客户端获取JSESSIONID值是“解决方案”的问题是什么?在一个新问题中详细说明这一点,您将获得有关如何以正确方式进行操作的答案。HttpSession

认真对待。我们不是在嘲笑你,我们只是试图帮助你朝着正确的方向前进,以避免你的项目/Webapp会因为安全漏洞和不良做法而崩溃和/或你会被解雇。


答案 2

您可以按照BalusC的答案进行操作,但是这种设施的存在是不同用户之间的初步安全漏洞。您不应该将这样的东西构建到您的应用程序中。


推荐