[英]Servlet Acting as Proxy: How to forward the session?
我不太确定我要实现的要求的可行性,但是这是如何进行的:
HTTPClient
实现的,而不是通过Request Dispatcher实现的。 我基本上是向远程服务器发出新的HTTP请求。 HttpServletRequest
)具有与其相关联的会话。 HTTPSession
的isNew()
属性为false。 我试图从根本上找到一种将会话转发到远程服务器的方法。
更精确地说: 是否可以简单地从HttpServletRequest
获取会话并将其放入新创建的HTTP请求的会话中(通过HTTPClient
)?
这取决于您的远程WS如何维护会话。 例如,如果它使用cookie(Tomcat会在其他技术中做到这一点),则转发传入的标头应该可以帮助您实现这一点(请确保您提到接受cookie,但我默认HTTPClient会这样做)。 现在,如果它基于URL中的参数,那么您应该尝试重现该行为。
如果两个节点(代理节点和服务节点)是不属于应用程序集群的单独进程,则可能不是。
Servlet容器通常管理HttpSession。 如果将请求转发到由另一个容器托管的另一个服务,则将具有另一个会话对象。
如果两个节点是群集的一部分,那么通常可以通过多种机制(在内存复制,数据库同步等中)在群集中的节点之间共享会话。
另一个选择是将会话数据外部化为Redis,Memcached,Coherence等。某些应用程序服务器对此过程具有可插拔的支持。 我相信在这种情况下,应用程序服务器节点不一定必须是集群的成员才能共享会话数据。
当我问这个问题时,我缺乏会话处理的一些基础知识。 经过一番研究和讨论之后,我得到了:
JSESSIONID
变量处理。 JSESSIONID
(可以将其关闭)。 远程服务器认为这是一个新会话的原因是因为请求没有设置此JSESSIONID
。
代理执行以下操作以确保转发会话:
JSESSIONID
。 JSESSIONID
。 JSESSIONID
和远程服务器JSESSIONID
的映射。 基本上,代理会执行从客户端的JSESSIONID
到远程服务器的JSESSIONID
的映射。 这样,会话将转发到远程服务器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.