session - 在两个不同的应用程序之间传递 session 数据

标签 session tomcat jsf-2 state

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

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

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

最佳答案

几种方式:

  1. 将数据存储在数据库中,并通过一个长的、唯一的、难以猜测的自动生成的 key 来识别它,而您又将其存储在域范围的 cookie 中。这样,两个应用程序都可以根据在 cookie 中找到的 key 从数据库中获取数据。

  2. 公开ServletContext这两个应用程序的相互。在Tomcat中,这是添加crossContext="true"的问题到 <Context> Web 应用程序的元素 context.xml .这样你们就可以得到对方的ServletContext通过 ServletContext#getContext().最后放一些Map<String, SomeData>其中由两个应用程序共享的某个 ID 键入,例如登录用户 ID(您应该只确保同一用户不能有多个 session )。

关于session - 在两个不同的应用程序之间传递 session 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7999600/

相关文章:

session - Play 1.2.2 中请求之间的 session 丢失

无法访问 PHP session 变量

c# - 重复 session ID

Java Web 应用程序指定入口点

jsf - 是否跨 session 范围的 JSF 支持 bean 观察到 CDI 事件

php - 从 symfony 2 访问所有存储的 session ?

eclipse - 如何使用 SpringSource Toolsuite 运行 Web 应用程序?

Apache 正在阻止 tomcat 的 ROOT?

jsf-2 - JSF viewAction 传递参数并设置它,但返回 null

jsf-2 - 将 UTF-8 字符串传递给 f :viewParam in JSF