5

我正在使用JSP& Servlets(Container: Tomcat7, Database: Oracle10)开发 Web 应用程序

我开发了一些 Web 应用程序,例如Profile, Reports, Leads. 然后我开发了一个Login应用程序。在此应用程序中,我将USERIDSession更多会话属性一起存储。

用户登录后,将显示包含指向其他应用程序的链接的菜单,例如指向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.

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

提前致谢

更新1

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

4

2 回答 2

5

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

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

使用 AES-256 进行加密。

于 2013-04-24T07:29:03.187 回答
4

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

于 2013-04-17T12:53:11.303 回答