在退出另一个GAE应用程序后,剩余登录到一个GAE应用程序

时间:2013-06-05 15:10:26

标签: java google-app-engine

我们有一个Google App Engine Java应用程序(定义为App A),它根据登录的用户提供用户角色的信息。这是一个企业应用程序,因此需要将Google身份验证设置为我们的域。

通常,链接将由其他GAE应用程序(定义为应用程序B)调用,因此用户将永远不必显式登录应用程序。这些其他GAE应用也会将Google身份验证设置为我们的域名。

我们正在使用标准UserService

UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();

假设有两个用户正在使用同一台计算机。我们遇到的问题是当用户A退出App B并且用户B随后登录到App B时,App A仍然认为用户A已登录,因此返回用户A的角色信息。所以现在用户B有他不应该的角色。

正如我所读到的,登录用户获得了为appspot设置的SACSID cookie。我试图使会话无效,更改SACSID cookie以使其为空。 (如下面的代码所示)。我试图在UserService调用之前以及在我返回servlet的响应之前放入以下代码。

Cookie[] cookies = req.getCookies();
if (cookies != null) {
  for (int i = 0; i < cookies.length; i++) {
    log.info("Cookie " + i + ": " + cookies[i].getName());
    if (cookies[i].getName().equals("ACSID")) {
      cookies[i].setMaxAge(0);
      cookies[i].setValue("");
      cookies[i].setPath("/");
    }
    if (cookies[i].getName().equals("SACSID")) {
      cookies[i].setMaxAge(0);
      cookies[i].setValue("");
      cookies[i].setPath("/");
    }
    res.addCookie(cookies[i]);
  }
}

此解决方案似乎有效。但是,仅在我第二次点击App A的链接时,用户凭据才会刷新。

示例:用户A登录到应用程序B.用户A点击应用程序A的链接。应用程序A将返回用户A的角色

用户B登录App B.用户B点击App A的链接.App A仍然返回用户A的角色。用户B再次点击App A的链接,只有这次,App A才会返回用户B的角色。

有没有人有任何想法或建议?

0 个答案:

没有答案