Платформа App Engine с помощью службы Users автоматически обеспечивает проверку аутентификации пользователя в системе Google Accounts.
Служба Users GAE-платформы предоставляет программный интерфейс, обеспечивающий в коде приложения проверку прохождения пользователем аутентификации, а также создание URL-адреса страницы аутентификации клиента и URL-адреса страницы выхода клиента из системы.
Программный интерфейс Users API представлен пакетом com.google.appengine.api.users, включающим в себя интерфейс UserService, классы User и UserServiceFactory, исключение UserServiceFailureException.
Объект User, применительно к пользователю Google-аккаунта, содержит такую информацию, как идентификатор пользователя, его логин, а также адрес электронной почты.
Для GAE-приложения можно ограничить число авторизированных пользователей, прошедших аутентификацию с помощью Google-аккаунта, храня User-объекты зарегистрированных для приложения пользователей в Datastore-хранилище платформы App Engine и на JSP-странице с ограниченным доступом проверяя соответствие User-объекта пользователя, зашедшего на страницу, User-объекту, хранящемуся в Datastore-хранилище:
<%@ page import="com.google.appengine.api.users.*" %>
<%@ page import="com.google.appengine.api.datastore.*" %>
<%@ page import="com.google.appengine.api.datastore.Query.*" %>
<%
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
String nickName="";
String email="";
String idUser="";
if (user != null) {
Query qUsers = new Query("Users");
PreparedQuery pq = datastore.prepare(qUsers);
int auth=0;
for (Entity result : pq.asIterable()) {
String id_user = (String) result.getProperty("id_user");
if(id_user.equals(user.getUserId())){
auth=1;
nickName=(String) result.getProperty("nickName");
user=(User)result.getProperty("user");
email=user.getEmail();
idUser=id_user;
}}
if(auth==0){
response.sendRedirect("/");
}}
else{
response.sendRedirect(userService.createLoginURL("/"));
}
%>
В вышеприведенном коде, если пользователь с Google-аккаунтом не зарегистрирован в приложении, он перенаправляется на главную страницу, открытую для всех пользователей. Если же страницу пытается открыть пользователь, не прошедший аутентификацию с помощью Google-аккаунта, он перенаправляется на Google-страницу аутентификации.