如何根据请求负载将请求与JavaEE应用程序中的HttpSession关联?

如何根据请求负载将请求与JavaEE应用程序中的HttpSession关联?,java,jakarta-ee,servlets,httpsession,Java,Jakarta Ee,Servlets,Httpsession,我有一个JavaEE应用程序,它通过http/s接收请求。请求不包含任何cookie或jsessionid请求参数 在请求负载中,我可以找到一个字符串“sessionid”,它应该允许我将该请求与HttpSession关联起来。我已经设法实现了一种在内存中存储会话映射的机制,但在集群环境中,这种机制(很难)可伸缩 将请求关联到HttpSessions的标准JavaEE机制基于cookie或URL重写,这对我来说是不可用的,因为我不控制发送请求的第三方。此外,HttpServletRequest对

我有一个JavaEE应用程序,它通过http/s接收请求。请求不包含任何cookie或jsessionid请求参数

在请求负载中,我可以找到一个字符串“sessionid”,它应该允许我将该请求与HttpSession关联起来。我已经设法实现了一种在内存中存储会话映射的机制,但在集群环境中,这种机制(很难)可伸缩

将请求关联到HttpSessions的标准JavaEE机制基于cookie或URL重写,这对我来说是不可用的,因为我不控制发送请求的第三方。此外,HttpServletRequest对象没有setSession()方法

有没有一种简单的方法可以将请求与HttpSessions关联起来,而不依赖于特定的Java EE服务器或某些分布式缓存?

以下几点说明:

  • 第三方客户端不符合HTTP规范,这不是您的问题
  • 如果您需要自定义机制,那么应该实现所有这些机制。也就是说,不要依赖HttpSession—为每个sessionId制作一个
    映射,并自己支持它
  • 任何其他解决方案都需要将代码插入容器(对于tomcat,thay可能是一个阀门),但没有标准解决方案
以下几点陈述:

  • 第三方客户端不符合HTTP规范,这不是您的问题
  • 如果您需要自定义机制,那么应该实现所有这些机制。也就是说,不要依赖HttpSession—为每个sessionId制作一个
    映射,并自己支持它
  • 任何其他解决方案都需要将代码插入容器(对于tomcat,thay可能是一个阀门),但没有标准解决方案

我以前也走过这条路,那是一条死胡同。您确实需要选择除HttpSession之外的其他机制 它可以简单到每个会话都有一个唯一的id(应该存储在数据库中而不是内存中)或者更复杂的东西。 以下链接可能会对您有所帮助

  • (尽管谷歌不赞成,但这是一个值得研究的好架构)


但是,是的,改变机制确实意味着第三方必须遵守它。

我以前就走过这条路,这是一条死胡同。您确实需要选择除HttpSession之外的其他机制 它可以简单到每个会话都有一个唯一的id(应该存储在数据库中而不是内存中)或者更复杂的东西。 以下链接可能会对您有所帮助

  • (尽管谷歌不赞成,但这是一个值得研究的好架构)


但是,更改机制确实意味着第三方必须遵守它。

我知道HttpServletRequest有一个getSession。它没有设置会话。第一个点直接击中了头部。修复客户,或者告诉负责人修复它。@VictoriaOnescu对不起,我看错了。删除了这一点。我知道HttpServletRequest有一个getSession。它没有设置会话。第一个点直接击中了头部。修复客户,或者告诉负责人修复它。@VictoriaOnescu对不起,我看错了。删除了这一点。其他人仍然存在。