当前位置: 首页 > 面试题库 >

如何使用JSESSIONID手动加载Java会话?

郭元明
2023-03-14
问题内容

我有一个处理多部分表单发布的servlet。该帖子实际上是由嵌入在页面中的Flash文件上传组件发布的。在某些浏览器中,Flash生成的POST不包含JSESSIONID,这使我无法在发布期间从会话中加载某些信息。

Flash上​​载组件的确在特殊格式字段中包含cookie和会话信息。使用此表单字段,我实际上可以检索JSESSIONID值。问题是,我不知道如何使用此JSESSIONID值手动加载该特定会话。

编辑- 基于ChssPly76的解决方案,我创建了以下 HttpSessionListener 实现:

    @Override
    public void sessionCreated(final HttpSessionEvent se) {
        final HttpSession session = se.getSession();
        final ServletContext context = session.getServletContext();
        context.setAttribute(session.getId(), session);
    }

    @Override
    public void sessionDestroyed(final HttpSessionEvent se) {
        final HttpSession session = se.getSession();
        final ServletContext context = session.getServletContext();
        context.removeAttribute(session.getId());
    }

这会将所有会话作为其唯一ID映射的属性添加到 ServletContext
。我可以在上下文中放置一个会话图,但这似乎是多余的。请发表对此决定的任何想法。接下来,我将以下方法添加到我的servlet中以按ID解析会话:

    private HttpSession getSession(final String sessionId) {
        final ServletContext context = getServletContext();
        final HttpSession session = (HttpSession) context.getAttribute(sessionId);
        return session;
    }

问题答案:

没有API可通过ID检索会话。

但是,您可以做的是在Web应用程序中实现会话侦听器,并手动维护以id为键的会话映射(可以通过session.getId()检索会话ID
)。然后,您将能够检索所需的任何会话(而不是像其他人建议的那样欺骗容器将其替换为当前会话)



 类似资料:
  • 问题内容: 我想通过JSESSIONID 获取Java 。可能吗?如果是,怎么办? 问题答案: 你需要收集所有在用你自己。 只需按以下所示注册即可运行: 然后,在任何您想做的地方都可以解决问题。 也就是说,这是一种 巨大的 气味。当然,解决 实际 功能需求的方法肯定比这更好;)正如我在您的后续问题中评论的那样: 这是您第二次询问一个在现实世界中永远不应该实践的问题。老实说,这一切都有味道。这是什么

  • 我有一个运行在Tomcat5上的非常好用的web Java1.5web应用程序。应用程序依赖于它的会话,所以只要会话Cookie被传递出去,或者JSESSIONID出现在上下文路径的末尾,就可以正常工作,就像“;JSESSIONID=...” null

  • 我想连接到web服务(WS)。但是,为了与这个web服务交互,必须提供一个cookie。 到目前为止,这是我所拥有的: 如何将所需的cookie添加到对WS的底层HTTP请求中?

  • 我使用papyrus创建了一个类图,得到了一个*.uml模型。现在我想通过编写一些Java代码来迭代*.uml元素。 我尝试了以下代码: 但我有例外:

  • 问题内容: 我查找了语法并搜索了api,但仍然对该过程感到困惑。我还搜索了Stackoverflow。加载类并从中动态创建对象的正确方法是什么?换句话说,我希望用户指定要创建的对象类型,然后创建该类型的对象。我不需要菜单,因为我希望他们能够选择当前目录中的任何类。 问题答案: 假设该类具有无参数构造函数,则最简单的方法是- 参考-java.lang.Class

  • 我知道如何加载CSS。 怎么卸载?