我正在尝试为谷歌应用引擎编写一个仅供我自己使用的应用程序。 (我知道这听起来很奇怪..只是暂时)我正在尝试编写一个登录 servlet,它将使用谷歌的 UserService 对用户进行身份验证,并且仅当我登录时才让用户进入应用程序,并显示一条简短消息提示注销其他所有人。
这是我写的代码:
public class MainPageServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
resp.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
resp.setContentType("text/html");
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
if (user != null) {
if(user.getEmail().equals("aaadith@gmail.com")) {
resp.getWriter().println("done");
}
else {
resp.getWriter().println("Hello, " + user.getNickname()+"<br>");
resp.getWriter().println("Thanks for your interest. But this application is still not available to everybody.");
resp.getWriter().println("<a href="+UserServiceFactory.getUserService().createLogoutURL(userService.createLoginURL(req.getRequestURI()))+">Log out</a>");
}
} else {
resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
}
}
与“赶走”所有其他用户相关的代码工作正常。但是我在登录时遇到问题:登录后,它按预期显示消息“完成”。然而,在此之后,如果我打开其他一些谷歌服务并从那里注销并再次调用这个 servlet,它仍然显示消息“完成”。我原以为该应用程序会再次提示我登录..这没有发生..我认为它发生了,因为结果被缓存并因此禁用了缓存(方法中的第一行)......但即使在之后问题仍然存在那..怎么了?我如何获得预期的行为?
最佳答案
你不知道。如果您希望用户注销您的服务,那么他们需要注销您的服务(通过调用 UserManager 的注销方法)。他们与其他 Google 服务共享用户名和密码这一事实并不意味着退出这些其他服务会自动将它们从您的服务中退出。
关于java - 谷歌应用引擎上的 UserService 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2015507/