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

Java 如何将会话从一个Tomcat服务器转移到另一个?,java,tomcat,wicket,Java,Tomcat,Wicket,我们有一个用于网络商店的Tomcat服务器,当用户登录时,我们需要将用户转移到另一个(安全)服务器。这里有一个详细的解释: 1) 我们有两个Tomcat服务器:一个“常规”(HTTP)和一个安全(HTTPS) 2) 用户最初访问常规服务器 3) 当他们登录时,我们需要获取他们的登录数据,以及关于他们当前所在(或试图查看)页面的信息,将其传递到安全服务器并进行实际登录;例如,未登录的用户看到产品列表,单击“购买”,并显示一个弹出窗口,要求用户登录;用户输入他/她的凭据,这些凭据以及关于他想要购买的

我们有一个用于网络商店的Tomcat服务器,当用户登录时,我们需要将用户转移到另一个(安全)服务器。这里有一个详细的解释:

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

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

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

这怎么可能呢?请注意以下事项:

1) 我们试过用饼干做,但我们决定不这样做

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

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

值得一提的是,我们使用的技术有Tomcat服务器、Wicket、Spring、iBatis和MySQL


提前感谢:)

不确定我是否得到了您想要的要点,但您可以将“弹出”页面从安全应用程序发送到受保护的URL。这将导致在安全服务器上进行身份验证,您可以从那里开始。例如,如果不安全的产品页面位于www.domain.com/browse/id1上,则“购买”按钮将打开一个指向secure.domain.com/buy/id1的弹出窗口,从而在URL上传输产品id时进行身份验证。

如果要在不同的Tomcat实例之间共享会话,您可以将它们配置为具有会话复制的群集:

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


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

我可以问一下您为什么决定不使用cookie吗?我访问过的每个需要跨多个web服务器跟踪用户会话的站点都使用了cookie。您为用户设置了一个具有唯一id的cookie,如果cookie存在,请在数据库中查找您的用户会话。你的第二个音符会杀死它。问题在第二个音符。我们不想使用数据库,因此我们必须保存用户的用户名、密码和有关他/她在cookie中单击的内容的信息(或更多)。在Cookie中保留用户名和密码存在安全风险。。。除非这些可以以某种方式得到保护,否则不要将用户名密码保存在cookie中。在cookie中放入唯一的会话id,该id在数据库中与用户的ip地址和用户帐户关联。同时让cookie在他的浏览器会话中过期。谢谢你的帮助,但我不能这样做。我们没有会话服务器,也不希望将会话保留在应用程序使用的SQL server中。而且,由于我不能在cookie中保留用户名和密码,我必须告诉非安全服务器创建一个包含所有信息的对象,然后将其传递给安全服务器。如果你对我如何做到这一点有任何想法,我将非常感激:)谢谢你的帮助,人们:)我发现Wicket有一个重定向页面。我通过将安全服务器URL传递给构造函数,然后执行redirectToInterceptPage(redirectPage)来创建它,但问题是无论我做什么,我都无法向redirectPage添加任何参数/属性。我似乎无法将RequestParameters和PageParameters都传递到redirectPage,然后再传递到安全服务器(它们最终都为空)。嗨,又是我:)很抱歉没有早点回复,我有点忙。我必须补充的是:不能使用cookies,因为非安全服务器和安全服务器将位于不同的域上。斯派克的想法是我最喜欢的,我开始实施它,但因为它使用cookies,我不能使用它。因此,我将尝试在网上商店上设置登录表单,将其内容直接提交到安全服务器。老实说,我不知道该怎么做。到目前为止,我所做的是将我需要的所有参数“注入”到RequestCycle中。。。。。。为此,我扩展了RedirectRequestTarget并尝试将请求参数插入请求本身。我还注意到,您只能在响应中添加cookies。总之,简而言之,一旦我到达安全服务器,所有参数都会丢失。如果有人对此有任何想法,我还是想听听:)