2010-12-13 8 views
6

Tengo curiosidad acerca de cómo funciona el servicio al usuario del motor de la aplicación Google. Según entiendo, el usuario que inició sesión se almacena en la cookie. Para obtener la cookie, uno debe tener un objeto de solicitud http servlet (para el servlet de java al menos). Pero la API de servicio al usuario no requiere ninguna solicitud de servlet http como entrada, entonces, ¿cómo obtiene la cookie para verificar si el usuario está conectado o no?¿Cómo funciona el servicio de usuario de Google App Engine internamente?

Tim

Respuesta

3

Durante las solicitudes de ajustes del usuario, is handled por aplicación servlet de Google.

[I] f el usuario ha accedido y obtener la dirección del usuario de correo electrónico o un identificador OpenID mediante la API de servlet estándar, con el método del objeto solicitud getUserPrincipal().

Durante el proceso de inicio de sesión, el servicio funciona utilizando redirecciones, similares a OpenID u OAuth. Eche un vistazo a las URL a lo largo del proceso de inicio de sesión.

  1. Los usuarios son redirigidos a una dirección URL, el cual es manejado por App Engine, en su aplicación, algo así como:

    http://app.appspot.com/_ah/login?continue=http://app.appspot.com/dosomething

  2. El controlador de acceso redirige al servicio de acceso a Google, algo así como :

    https://www.google.com/accounts/ServiceLogin?service=ah&continue=http://app.appspot.com/_ah/login%3Fcontinue%3Dhttp://app.appspot.com/dosomething&ltmpl=gm&ahname=Your+App+Name&sig=hf3322hdsk98fd8fh3u29hfh24as

  3. que se conecte, a continuación, Google le redirige ba ck al controlador de entrada del motor de aplicaciones:

    http://app.appspot.com/_ah/login?continue=http://app.appspot.com/dosomething

    Cuando Google redirige, serán pasados ​​algunos parámetros de consulta al controlador de inicio de sesión de App Engine, y la incorporada en el controlador de acceso establecerá la cookie.

  4. Te redirigen a la URL que especificaste o desde donde "comenzaste". Algo así como:

    http://app.appspot.com/dosomething

3

¿Y el de las llamadas posteriores? Por ejemplo (continuando desde su punto 4)

  1. usuario llama al servlet http://app.appspot.com/dosomethingelse

En el dosoemthingelse servlet, puedo llamar de nuevo UserService como esto

UserService userService = UserServiceFactory.getUserService(); 
User user = userService.getCurrentUser(); 
String userId = user.getUserId(); 

¿Cómo funciona este caso UserService obtiene la cookie para saber quién es el usuario actualmente conectado?