2013-04-17 148 views
5

我正在开发使用JSP & Servlets Web应用程序共享会话

我已经开发了一些Web应用程序像ProfileReportsLeads(容器:Oracle10Tomcat7,数据库)。然后我开发了A Login应用程序。在此应用程序中,我将USERID存储在Session中,并具有更多会话属性。

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

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

  • 如果我尝试访问会话withing相同的应用程序(登录)然后我得到会话使用所有必需的属性
  • 但是,当我尝试从其他应用程序访问会话像 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文件,并将其部署到Glassfish。 所以我想分享这两个应用程序之间的会话(在Glassfish上),所以如果任何人有任何想法,那么请让我知道。 (链接到任何教程也将不胜感激)

+0

表示您想要在运行于同一Web服务器上的多个应用程序之间共享数据。这可以在Web服务器Catalina中进行一些操作。我不认为会有另一种方法来做到这一点, –

+0

@Nikhil是的,我想分享在同一个Web服务器上运行的几个应用程序之间的数据(tomcat7) – Bhushan

+0

http://stackoverflow.com/questions/9293350/domain- level-session-cookie-on-multiple-domains关键字:域级会话cookie –

回答

4

我看到这在我的商店完成的方式是填充登录凭据到加密的cookie和安装代理(Java过滤器,Web服务器MODS等,在需要用户数据的应用程序)将解密cookie并将数据传递给下游应用程序。如果您想跨应用程序共享,请勿将登录信息存储在HTTP会话中。

+2

从技术上讲,这是一件棘手的单身单身歌曲。 – gaborsch

+0

@GaborSch你能详细说明你为什么认为它的黑客?如果Web应用程序运行在不同的域上并且用户身份完全不相关,那么我会考虑加入完整的SSO解决方案。但是如果你的应用程序都在同一个域中,那么我认为这种方法没有任何问题。 –

+0

我不会将任何用户凭证存储在会话cookie中,无论是否加密。这是一个潜在的安全漏洞;但如果你使用不对称编码进行加密,那可能没问题。无论如何,恕我直言,这将涉及太多的组件。 – gaborsch

5

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

  1. 认证成功后与加密的用户名添加cookie(你不需要加密密码)
  2. 如果您访问任何应用程序的使用用户名cookie和解密成功,这意味着用户已通过身份验证,并且不应显示登录页面。

使用AES-256进行加密。

+0

谢谢你的回答(和+1) – Bhushan