Я пытаюсь написать приложение для Google App Engine, которое было бы доступно только для меня. (Я знаю, это звучит странно ... на данный момент) Я пытаюсь написать сервлет входа в систему, который бы аутентифицировал пользователя с помощью Google's 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()));
}
}
}
Код, относящийся к «отгону» всех остальных пользователей, работает нормально. Но у меня возникают проблемы при входе в систему: после входа в систему отображается сообщение «сделано», как и ожидалось. Однако после этого, если я открою какой-то другой сервис Google и выйду из него и снова вызову этот сервлет, он по-прежнему показывает сообщение «выполнено». Я ожидал, что приложение снова запросит у меня вход в систему .. чего не происходит .. Я думал, что это происходит, потому что в результате получается кэширование и отключено кэширование (1-я строка в методе) ... но проблема сохраняется даже после что .. что не так? Как мне получить ожидаемое поведение?