在两个不同的应用程序之间传递会话

时间:2011-11-03 17:51:56

标签: session tomcat jsf-2 state

我有两个应用程序在Tomcat,JSF 2 Mojarra 2上运行。两个应用程序都映射到同一个域,但每个应用程序都映射到该域中的不同模式。一个应用程序用作首页,而另一个应用程序用于访问受保护的资源(不要问为什么不是所有在一个应用程序中,它是故意将应用程序分离为两个不同的实体,每个实体负责它自己的事情)。现在问题是:是否可能,如果是,如何在这两个单独的应用程序之间传递会话状态。这里要说明一些常见的情况:

  1. 用户在运行网站的主应用程序上执行某些操作,然后登录,登录到新应用程序后,他/她正在做的任何事情都将被带到新会话。

  2. (我觉得这个稍微复杂一点)用户在第一个应用程序中注册,并在成功注册到其他应用程序后自动登录。您必须登录的应用程序使用j_security_check表单登录(这将是困难的部分)

1 个答案:

答案 0 :(得分:3)

有几种方法:

  1. 将数据存储在数据库中,然后通过一个长而独特,难以猜测的自动生成密钥来识别数据,而该密钥又存储在域范围的cookie中。这样,两个应用程序都可以根据cookie中的密钥从数据库中获取数据。

  2. 将两个应用程序的ServletContext展开给对方。在Tomcat中,需要将crossContext="true"添加到Web应用程序<Context>的{​​{1}}元素中。通过这种方式,您可以通过context.xml获取彼此的ServletContext。最后在其中放置一些ServletContext#getContext().,其中某些ID由两个应用程序共享,例如登录用户ID(您应该只确保同一个用户不能有多个会话)。