2012-08-05 20 views
6

Sto cercando di gestire il mio utente tramite cookie. Non è così facile perché non c'è assolutamente alcuna documentazione su questo argomento.Java Play! 2 - Gestione utenti con cookie

Con l'aiuto del campione "zentask" Ho fatto questo:

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; 

    } 

sto usando in questo modo:

public static Result blank() throws Exception { 

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

    } 

Ora ho alcune domande/problemi:

  • 1.) Il cookie non è dectypted e ha sempre lo stesso aspetto. es. bdb7f592f9d54837995f816498c0474031d44c1a-username% 3Akantaki

  • 2.) Che cosa fa la classe Security.Authenticator?

  • 3.) Penso che la gestione degli utenti tramite i cookie sia un problema molto comune, play! 2.0 mi offre una soluzione completa? O c'è almeno qualche documentazione?

risposta

12

L' re è anche stack completo per authentication e authorization - Play Authenticate di Joscha Feth. (Disponibile presso GitHub)

Incorpora campione pronto per l'uso per Java, che utilizza concetti di securesocial + full Deadbolt 2 (da Steve Chaloner) di sostegno. ha:

  • costruito nel possibilità di register e log in agli utenti di posta elettronica, Google, Facebook, Foursquare, Twitter, OpenID e provider personalizzati.
  • Supporto multilingue (attualmente: inglese, tedesco, polacco)
  • modelli personalizzabili (anche a scopo informativo e-mail)
  • Supporto per roles e permissions (via Deadbolt 2) supporto di recupero
  • password

Esiste un'app di esempio per Java. Puoi incorporarlo nella tua app.

+0

sembra incredibile, grazie! –

+0

Solo curioso, potresti darmi una breve panoramica di ciò che ho bisogno di cambiare per farlo funzionare per Mongodb? Suppongo che dovrei rimuovere tutti i metodi sql come - play.find etc e sostituirlo con morphia? Sto solo chiedendo perché avrei bisogno di cambiare molto. Non voglio fare un grosso errore all'inizio –

+1

Spiacente, non posso aiutarti nell'argomento 'MongoDB' e' Morphia'. Penso che sia la migliore idea per iniziare una nuova domanda, affrontando esattamente la gamma di esso. – biesior

12

Come mostrato nella Zentask sample, la classe Secured dovrebbe estendere Security.Authenticator.

Con questo, consente di inserire un'annotazione @Security.Authenticated su un controller o su un'azione. Questa annotazione consente di reindirizzare il client a un'altra pagina se l'utente non è autorizzato correttamente (ignorando il metodo Security.Authenticator.onUnauthorized()).

Il flusso di lavoro è il seguente:

  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ì, grazie ho già letto l'esempio zentask. Ma nell'esempio zentask, onUnauthorized() o getUsername() non vengono mai usati, quindi penso che il playframework li stia chiamando. Come sa giocare quando un utente è autorizzato/non autorizzato? –

+0

Tramite il metodo getUsername(): restituisce null se l'utente non è autenticato http://www.playframework.org/documentation/api/2.0.2/java/play/mvc/Security.Authenticator.html#getUsername(play. mvc.Http.Context) –

+0

Ah ok, grazie. :) –