Comprobar login en Play! Framework

Bueno, desde hace tiempo que tenía ganas de dar una entrada sobre Play!. Es rápida y es (para mí al menos) muy útil.

¿A quién no le ha pasado que desea saber si alguien ha iniciado sesión en una aplicación web?. Claro que la gente que utilice alguna solución en base a la Servlet API puede conseguirlo editando los filtros en su web.xml, aunque claro está que para los que preferimos movernos hacia adelante (al menos cronológicamente) tenemos esta simple solución con Play!.

De entrada necesitamos una clase que extienda de play.mvc.Controller, con lo que sea necesario para validar el login:

package controllers;

import models.User;
import play.mvc.Before;

public class Controller extends play.mvc.Controller {

@Before static void isLogged(){
String usuario = session.get("usuario");
String otrofactor = session.get("otrofactor");
Long id = Long.parseLong(session.get("id"));
if(!sessionContainsBasics() || !isRealUserAndPass(usuario, otrofactor, id)){
redirect("/");
}
}

static boolean sessionContainsBasics(){
return
session.contains("usuario") &&
session.contains("otrofactor") &&
session.contains("id");
}

static boolean isRealUserAndFactor(String usuario, String otrofactor, Long id){
User a = User.findById(id);
if(a != null){
if(!a.otrofactor.equals(otro) || !a.usuario.equals(usuario){
session.remove("usuario");
session.remove("otrofactor");
session.remove("id");
return false;
}else if(a.otrofactor.equals(otrofactor) && a.usuario.equals(usuario)){
return true;
}
}
return false;
}
}

Cómo podemos apreciar esta clase nos permite por medio de tres validaciones (campos existentes en la clase User) comparar si lo que hay en sesión es válido con dos métodos y el que funciona cómo nuestro filtro. El método “sessionContainsBasics” nos permite ver si la sesión contiene los parámetros básicos para poder seguir, mientras que “isRealUserAndFactor” compara si los valores dados en dicha sesión son existentes en algún mecanismo de persistencia existente o del que nuestro sistema haga uso (en mi caso una base de datos). Con esto nos basta poner esta clase (con todo y nombre de archivo, tal y cómo está: ‘Controller’ y ‘Controller.java’) y que nuestros controladores pues sólo extiendan de esta clase.
En fin, es muy simple.

Bueno, gracias por la visita, nos vemos luego. Comentarios aceptados.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s