在Web应用程序中共享会话

我正在使用JSPServlets开发Web应用程序(容器: Tomcat7 ,数据库: Oracle10

我开发了一些Web应用程序,如ProfileReportsLeads 。 然后我开发了一个Login应用程序。 在这个应用程序中,我在Session存储了USERID以及更多的会话属性。

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

所以当我在用户登录后访问Session时:

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

用于检查会话的代码片段 (登录Web应用程序中的Servletfilter)

 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然后进行部署,但遗憾的是, Tomcat7不支持EAR

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

提前致谢

UPDATE1

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

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

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

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

使用AES-256进行加密。