¡La versión 2.0 de Play ya está lista! Ayúdanos a traducir la documentación de la útlima versión y sigue nuestro progreso.

Manuales, tutoriales & referencias

Consulte

Contenidos

Elija la versión

Buscar

Busque con google

Libros

Módulo de Seguridad

El módulo Secure le permite crear de manera muy simple una administración básica de la autenticación y autorización en su aplicación. Provee un controlador simple controllers.Secure que define un conjunto de interceptores que fácilmente puede agregar a sus controladores usando la anotación @With.

Configuración del Módulo

Habilitar el módulo de seguridad de la aplicación

Habilite el módulo de seguridad en el archivo /conf/dependencies.yml agregando la siguiente línea después de require:

require:
    - play -> secure

Después ejecute el comando play dependencies para agregar el módulo a su aplicación.

Importe las rutas por defecto del módulo Secure

Importe las rutas por defecto del módulo agregando al archivo conf/routes la siguiente línea:

# Import Secure routes
*      /                module:secure

Nota: no es obligatorio utilizar el archivo de rutas por defecto. Puede definir sus propias rutas, o también mezclarlos ambos enfoques.

Protegiendo un controlador

Para proteger un controlador solo necesita anotarlo usando @With. Por ejemplo:

@With(Secure.class)
public class Application extends Controller {
    
    public static void index() {
        render();
    }
}

Este controlador será automáticamente protegido mediante la página de autenticación por defecto.

Personalizado el mecanismo de autenticación

Por defecto, la página de autenticación aceptará cualquier combinación de usuario/contraseña. Para personalizar este comportamiento, en su aplicación debe especificar un proovedor del tipo Security. Tan solo cree una clase en el paquete controllers que herede de la clase controllers.Secure.Security, entonces podrá sobreescribir el método authenticate(String username, String password).

package controllers;
 
public class Security extends Secure.Security {
    
    static boolean authenticate(String username, String password) {
        User user = User.find("byEmail", username).first();
        return user != null && user.password.equals(password);
    }
}

Nota: también puede sobreescribir otros métodos para personalizar cómo la aplicación debe reaccionar frente a los eventos de autenticación (onAuthenticated, onDisconnected).

Obteniendo el usuario autenticado

Desde el código de su aplicación puede usar la clase que acaba de crear para obtener el usuario conectado:

@With(Secure.class)
public class Application extends Controller {
    
    public static void index() {
        String user = Security.connected();
        render(user);
    }
}

Agregando validaciones de Autorización

Anotaciones en el Controller

Puede usar la anotación @Check ya sea en una clase controller o en un método dentro de éstos para decirle al módulo de seguridad que valide que el usuario autenticado efectivamente tiene la autorización requerida para invocar esa acción.

Por ejemplo, para restringir un método de acción a usuarios autorizados:

@With(Secure.class)
public class Application extends Controller { 
   …
   
   @Check("administrator")
   public static void delete(Long id) {
       …
   }
}

Para restringir todas las acciones en un controlador, use la anotación @Check en la clase del controlador:

@With(Secure.class)
@Check("administrator")
public class Application extends Controller { 
   …
   
   public static void delete(Long id) {
       …
   }
   
   public static void edit(Long id) {
       …
   }
}

Por defecto, todos los Checks del módulo de seguridad retornarán Verdadero, autorizando el acceso especificado. Debe personalizarlo sobreescribiendo uno o más métodos en la clase Security:

package controllers;
 
public class Security extends Secure.Security {
    …
    
    static boolean check(String profile) {
        User user = User.find("byEmail", connected()).first();
        if ("administrator".equals(profile)) {
            return user.admin;
        }
        else {
            return false;
        }
    }    
}

Tags para las plantillas

Además puedes usar el tag secure.check para verificar la autorización en las plantillas. Esto es muy útil cuando necesite mostrar condicionalmente en la interfaz de usuario controles para operaciones que están protegidas en el controlador, por ejemplo:

#{secure.check "administrator"}
    <a href="@{delete(item.id)}">Delete</a>
#{/secure.check}

El tag solamente muestra su contenido (body) para los usuarios autorizados, así que el link ‘Delete’ sólo es mostrado en pantalla cuando un usuario está autorizado para ejecutar la acción delete en el controlador.

Commandos

El módulo Secure provee un comando play secure:override que puede usar para sobreescribir la página de autenticación, de manera que pueda personalizarlo en su aplicación. Esto lo puede hacer copiando el archivo correspondiente del módulo a un archivo que será usado en stu aplicación.

Puedes abreviar play secure:override con play secure:ov.

Sobreescribir CSS

Use el comando play secure:override --css para copiar un archivo CSS a su aplicación, a través del cual podrá personalizar los estilos de la página de autenticación.

Sobreescribiendo la plantilla de autenticación

Use el comando play secure:override --login para copiar la plantilla con la página de autenticación (login), a través del cual podrá personalizar su presentación.

Sobreescribiendo el layout

Use el comando play secure:override --layout para copiar la plantilla con la plantilla con el layout de su aplicación, a través del cual podrá personalizar su presentación.