在Web应用程序中共享会话

时间:2013-04-17 12:43:42

标签: java jsp tomcat servlets glassfish

我正在使用JSP& Servlets(容器:Tomcat7,数据库:Oracle10

我开发了一些网络应用程序,例如ProfileReportsLeads。然后我开发了一个Login应用程序。在这个应用程序中,我将 USERID 存储在Session中,并增加了一些会话属性。

用户登录后,将显示菜单,其中包含指向其他应用程序的链接,例如Profile应用程序的链接。

因此,当我在用户登录后访问Session时:

  • 如果我尝试使用相同的应用程序(登录)访问会话,那么我将获得具有所有必需属性的会话
  • 但是当我尝试从其他应用程序访问会话时 Profiles然后我将会话设为null

检查会话的代码段(登录Web应用程序中的Servlet过滤器)

HttpSession session = request.getSession(false);
if(session==null)
{
    System.out.println("Session does not exist... Redirected to LOGIN Page.");
    response.sendRedirect("/ApplicationName/Login.jsp");
}

我正在访问Profile应用程序中的会话以检查用户是否已登录。

然后我搜索过,并且我发现出于安全原因无法从其他应用程序访问Session。(我还发现可以通过设置crossContext="true"来完成)

然后我找到了其他选项,例如制作所有应用的EAR然后进行部署,但遗憾的是EAR Tomcat7不支持它。

我是网络环境的新手,所以如果有人在此之前就此工作过,请告诉我有什么选择?

提前致谢

UPDATE1

现在我已经决定使用EAR,其中我将收集所有WAR个文件,然后我将尝试在它们之间共享会话。由于Tomcat不支持EAR我安装了Oracle Glassfish,然后我创建了Enterprise Application Project,其中包含两个应用1. Login2. Profiles,然后创建了EAR 1}}文件,并将其部署在Glassfish上。 所以我想分享这两个应用程序之间的会话(在Glassfish上),所以如果有人对它有任何想法,那么请告诉我。 (也欢迎链接到任何教程)

2 个答案:

答案 0 :(得分:5)

如上所述,您要求的要求是单点登录(SSO)。您可以实现的最简单的SSO如下:

  1. 验证成功后,添加带有加密用户名的cookie(您无需加密密码)
  2. 如果您使用用户名cookie访问任何应用程序并成功解密,则表示用户已通过身份验证,您不应显示登录页面。
  3. 使用AES-256进行加密。

答案 1 :(得分:4)

我在商店里看到这种方式的方法是将登录凭据填入加密的cookie并在需要用户数据的应用程序前面安装代理(java过滤器,Web服务器模块等),这将解密cookie并将数据传递给下游应用程序。如果要跨应用程序共享登录信息,请不要在HTTP会话中存储登录信息。