domingo, 3 de enero de 2010

Google AppEngine: Acceso a las cuentas de google.

Una de las facilidades que nos provee Google AppEngine es la de acceder a las cuentas de google. He estado experimentando un poco con esto y puedo remarcar los siguientes puntos:
  • El acceso a la info del usuario logueado se realiza a través del mecanismo estándar de JAAS.
  • Pueden protegerse urls del sitio mediante el mecanismo estándar de la web tier, esto es definiéndolas en el archivo web.xml.
  • El mecanismo de login y logout es no estándar.
En este post demostraré el uso que le he dado a esta funcionalidad en el appspot del sitio. En próximos post demostraré alternativas para proteger urls del sitio.

El ejemplo es la implementación un servicio RPC de GWT. Primero echemosle una mirada a los import.
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import appspot.client.CommonService;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;
import javax.servlet.http.HttpServletRequest;
Lo primero que vemos entonces son los import comunes de GWT para los servicios RPC, también vemos importada la interfaz necesaria para que la magia funcione "CommonService" (ese nombre lo elegí yo). Luego vemos las clases de google para acceder a sus cuentas, la "UserService" y "UserServiceFactory", de los nombres mismos ya se puede inferir el uso.

Lo próximo que veremos es la implementación de la clase de servicio, en la cual accedemos a las api.


public class CommonServiceImpl extends RemoteServiceServlet
implements CommonService {

@Override
public String getUserMail() {

UserService us = UserServiceFactory.getUserService();
if (!us.isUserLoggedIn()) {
return null;
}

HttpServletRequest req = getThreadLocalRequest();
String name = req.getUserPrincipal().getName();
return name;
}

@Override
public String getLoginUrl(String baseUrl) {
UserService us = UserServiceFactory.getUserService();
return us.createLoginURL(baseUrl);
}

@Override
public String getLogoutUrl(String baseUrl) {
UserService us = UserServiceFactory.getUserService();
return us.createLogoutURL(baseUrl);
}
}

Vemos que nuestro servicio tiene 3 métodos:
  • Obtener el usuario logueado.
  • Generar una URL que nos llevará a una pantalla de login.
  • Generar una URL que nos deslogueará del servicio.
En el primer método utilizamos el userService para preguntar si el usuario se encuentra logueado. Esta es una manera no estándar, pero realmente simpática y prolija.
Luego utilizamos una forma estándar para obtener el "User Principal", el cual traducido del lenguaje JAAS, es el usuario logueado.

Los métodos de generar urls son prácticamente iguales, en uno pedimos de una manera no estándar que nos entreguen una url de la página de login diciendo también la url a la cual queremos ir despues de estar logueados. Esto es realmente una ventaja comparado con la forma estándar en la cual definimos en web.xml un formulario de login al cual llegamos tratando de alcanzar una url no permitida, ya que la lógica de navegación para el login debe ser inferida y no puede leerse del propio código. Con eso le damos fin a nuestra demostración. Espero que haya sido de utilidad.

Saludos!

No hay comentarios.:

Publicar un comentario