如何将会话从一个Tomcat服务器转移到另一个?

时间:2011-04-05 14:06:09

标签: java tomcat wicket

我们有一个用于网上商店的Tomcat服务器,我们需要在用户登录时将用户转移到另一个(安全)服务器。以下是详细说明:

1)我们有两个Tomcat服务器:一个是“常规”(HTTP),另一个是“安全”(HTTPS)

2)用户最初访问常规服务器

3)当他们登录时,我们需要获取他们的登录数据,以及他们当前所在页面(或试图查看)的信息,将其传递给安全服务器并进行实际登录;例如,未登录的用户会看到产品列表,点击“购买”并显示弹出窗口,要求用户登录;用户输入他/她的凭证,这些凭证以及有关他想要购买的产品的信息被传递到安全服务器;安全服务器接收这些,执行登录并向用户显示所请求的产品

怎么可以这样做?请注意以下事项:

1)我们尝试过使用cookies,但我们决定不这样做

2)将会话保持到数据库然后让安全服务器获取它也不是一个选项

还有其他方法吗?我们正在考虑创建一个对象,然后将其作为HTTP POST参数传递,但我不确定如何做到这一点(我已经完成了任务)。

对于它的价值,我们使用的技术是Tomcat服务器,Wicket,Spring,iBatis和MySQL。

提前致谢:)

2 个答案:

答案 0 :(得分:2)

如果要在不同的Tomcat实例之间共享会话,可以将它们配置为具有会话复制的群集:http://tomcat.apache.org/tomcat-7.0-doc/cluster-howto.html

然后,您可以将Apache HTTP Server配置为负载均衡器,确保HTTP请求转到服务器1,HTTPS请求转到服务器2。

但是,您也可以只配置一个Tomcat实例(或N个相同的实例)来处理HTTP和HTTPS,并确保使用标准(web.xml中的...<transport-guarantee>CONFIDENTIAL</transport-guarantee>...)或特定于框架的配置进行安全访问

答案 1 :(得分:0)

不确定我是否掌握了您想要的内容,但您可以将“弹出窗口”设置为从安全应用程序提供给受保护URL的页面。这将导致身份验证在安全服务器上发生,您可以从那里开始。例如,如果不安全的产品页面位于www.domain.com/browse/id1上,那么“购买”按钮会打开一个弹出窗口,提供secure.domain.com/buy/id1,从而在传输产品时进行身份验证网址上的ID。