【发布时间】:2011-03-06 18:17:39
【问题描述】:
我想通过 JSESSIONID 获取 Java HttpSession。可能吗?如果是,怎么做?
【问题讨论】:
标签: java servlets httpsession
我想通过 JSESSIONID 获取 Java HttpSession。可能吗?如果是,怎么做?
【问题讨论】:
标签: java servlets httpsession
您需要自己使用HttpSessionListener 将它们全部收集在Map 中。
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中评论的那样:
这是您第二次提出在现实世界中永远不应该练习的问题。老实说,这一切都闻起来了。它是什么,您认为在服务器端获取与 JESSSONID 关联的
HttpSession并在客户端获取 JSESSIONID 值的问题是“解决方案”?在一个新问题中详细说明这一点,您将获得如何以正确方式进行操作的答案。
认真点。我们不是在取笑您,我们只是想帮助您朝着正确的方向前进,以避免您的项目/Web 应用程序由于安全漏洞和不良做法而中断和/或您被解雇。
【讨论】:
您可以按照 BalusC 的回答执行此操作,但这种设施的存在是不同用户之间的表面上安全漏洞。你不应该在你的应用程序中构建这样的东西。
【讨论】:
不,API 不允许这样做。
我想说的更多,但仅此而已。
【讨论】: