Java 从另一个GAE应用程序注销后,仍在一个GAE应用程序中登录

Java 从另一个GAE应用程序注销后,仍在一个GAE应用程序中登录,java,google-app-engine,Java,Google App Engine,我们有一个googleappenginejava应用程序(定义为appa),它根据登录的用户提供用户角色的信息。这是一个公司应用程序,因此需要将Google身份验证设置到我们的域 一般来说,该链接将由其他GAE应用程序(定义为应用程序B)调用,因此用户永远不必显式登录该应用程序。这些其他GAE应用程序也将在我们的域中设置Google身份验证 我们使用的是标准的UserService UserService userService = UserServiceFactory.getUserServi

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

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

我们使用的是标准的
UserService

UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
假设两个用户使用同一台计算机。我们遇到的问题是,当用户A退出应用程序B,用户B随后登录到应用程序B时,应用程序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]);
  }
}
Cookie[]cookies=req.getCookies();
如果(cookies!=null){
for(int i=0;i
这个解决方案似乎有效。然而,只有在我第二次点击应用程序A的链接时,用户凭据才会刷新

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

用户B登录到应用B。用户B点击应用A的链接。应用A返回用户A的角色。用户B再次点击应用程序A的链接,只有这一次,应用程序A才会返回用户B的角色

有人有什么想法或建议吗