我们有一个 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有他不应该有的角色。
正如我所读到的,登录用户会SACSID
为 apppot 设置一个 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]);
}
}
这个解决方案似乎有效。但是,只有在我第二次点击应用 A 的链接时,用户凭据才会刷新。
示例:用户 A 登录应用 B。用户 A 点击应用 A 的链接。应用 A 将返回用户 A 的角色
用户 B 登录到应用程序 B。用户 B 点击应用程序 A 的链接。应用程序 A 仍然返回用户 A 的角色。用户 B 再次点击应用 A 的链接,只有这一次,应用 A 将返回用户 B 的角色。
有没有人有任何想法或建议?