2012-08-05 10 views
6

Estoy tratando de administrar a mi usuario a través de una cookie. No es tan fácil porque no hay absolutamente ninguna documentación sobre este tema.¡Juego de Java! 2 - Gestión de usuarios con cookies

Con la ayuda de la muestra "zentask" Hice esto:

session("username", filledForm.field("username").value()); 

public class Secured{ 

    public static Session getSession() { 
     return Context.current().session(); 
    } 

    public static String getUsername() { 
     return getSession().get("username"); 
    } 

    public static boolean isAuthorized() throws Exception { 
     String username = getUsername(); 
     if (username == null) 
      return false; 
     long userCount = DatabaseConnect.getInstance().getDatastore() 
       .createQuery(User.class).field("username").equal(username) 
       .countAll(); 

     if (userCount == 1) 
      return true; 

     return false; 

    } 

lo estoy usando como esto:

public static Result blank() throws Exception { 

     if (Secured.isAuthorized()) 
      return ok(Secured.getUsername()); 
     else 
      return ok(views.html.login.form.render(loginForm)); 

    } 

Ahora tengo varias preguntas/problemas:

  • 1.) La cookie no está desactivada y siempre tiene el mismo aspecto. ej. bdb7f592f9d54837995f816498c0474031d44c1a-username% 3Akantaki

  • 2.) ¿Qué hace la clase Security.Authenticator?

  • 3.) Creo que la administración de usuarios a través de las cookies es un problema muy común, play! 2.0 ¿me ofrece una solución completa? ¿O hay al menos algo de documentación?

Respuesta

12

El re también es pila completa para authentication y authorization - Play Authenticate por Joscha Feth. (Disponible en GitHub)

Incorpora lista para su uso muestra para Java, que utiliza conceptos de securesocial + completa Deadbolt 2 (por Steve Chaloner) de apoyo. tiene:

  • construido en posibilidad de register y log in usuarios con el correo electrónico, Google, Facebook, Foursquare, Twitter, OpenID y proveedores personalizados.
  • Soporte multilenguaje (actualmente: Inglés, alemán, polaco)
  • Plantillas personalizables (también para los e-mails informativos)
  • Soporte para roles y permissions (vía Deadbolt 2) apoyo a la recuperación
  • contraseña

Hay una aplicación de muestra para Java. Puedes incorporarlo a tu aplicación.

+0

esto se ve increíble, gracias! –

+0

Simplemente curioso, ¿podría darme una breve descripción general de lo que necesito cambiar para que funcione en Mongodb? Supongo que tendré que eliminar todos los métodos sql como - play.find, etc. y reemplazarlo con morphia. Solo pregunto porque necesitaría cambiar mucho. No quiero cometer un gran error al principio –

+1

Lo siento, no puedo ayudarte en el tema 'MongoDB' y' Morphia' Creo que es mejor idea comenzar una nueva pregunta, abordando exactamente el rango de la misma. – biesior

12

Como se muestra en la Zentask sample, la clase Secured debe extenderse Security.Authenticator.

Con esto, permitirá poner una anotación @Security.Authenticated ya sea en un Controlador, o en una Acción. Esta anotación permite redirigir al cliente a otra página si el usuario no está debidamente autorizado (anulando el método Security.Authenticator.onUnauthorized()).

El flujo de trabajo es la siguiente:

  1. Check authorization:
  2. Add an unique identifier in the client cookies
  3. Check if authenticated
  4. Secure a controller or an action
  5. If not authorized, redirect the client to another page
+0

Sí, gracias, ya leí el ejemplo de zentask. Pero en el ejemplo zentask, onUnauthorized() o getUsername() nunca se utilizan, así que supongo que el playframework los está llamando. ¿Cómo sabe el juego cuando un usuario está autorizado/no autorizado? –

+0

A través del método getUsername(): devuelve null si el usuario no está autenticado http://www.playframework.org/documentation/api/2.0.2/java/play/mvc/Security.Authenticator.html#getUsername(play. mvc.Http.Context) –

+0

Ah bien, gracias. :) –

Cuestiones relacionadas