我想通过 JSESSIONID 获取 Java 的 HttpSession
,这是否可行?如果是,该如何实现?
我想通过 JSESSIONID 获取 Java 的 HttpSession
,这是否可行?如果是,该如何实现?
基本上,您需要使用HttpSessionListener
自己手动收集所有内容,并将其存储在Map
中。
@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相关联的HttpSession并在客户端获取JSESSIONID值是“the”解决方案的问题是什么?在一个新的问题中详细阐述,你会得到正确方法的答案。
认真对待。我们不是在嘲笑你,我们只是想帮助你走向正确的方向,以避免你的项目/网站因安全漏洞和不良做法而崩溃,或者导致你被解雇。
不,API 不允许这样做。
我想说的更多,但这就是全部了。