2012-08-05 10 views
6

Ich versuche, meinen Benutzer über Cookie zu verwalten. Es ist nicht so einfach, weil es zu diesem Thema absolut keine Dokumentation gibt.Java-Spiel! 2 - Benutzerverwaltung mit Cookies

Mit Hilfe der Probe "zentask" Ich habe dies:

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; 

    } 

ich es so bin mit:

public static Result blank() throws Exception { 

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

    } 

Jetzt habe ich mehrere Fragen/Probleme:

  • 1.) Cookie ist nicht dekodiert und sieht immer gleich aus. zB bdb7f592f9d54837995f816498c0474031d44c1a-username% 3Akantaki

  • 2.) Was macht die Klasse Security.Authenticator?

  • 3.) Ich denke Benutzerverwaltung durch Cookies ist ein sehr häufiges Problem, bietet Play! 2.0 mir eine komplette Lösung? Oder gibt es zumindest eine Dokumentation?

Antwort

12

Die re ist auch voller Stapel für authentication und authorization - Play Authenticate von Joscha Feth. (Erhältlich bei GitHub)

Es enthält ready-to-use Probe für Java, die Konzepte von securesocial + full Deadbolt 2 (von Steve Chaloner) Unterstützung verwendet. es hat:

  • in Möglichkeit gebaut register und log in Benutzer mit E-Mail, Google, Facebook, Foursquare, Twitter, OpenId und benutzerdefinierte Anbieter.
  • Unterstützung mehrerer Sprachen (aktuell: Englisch, Deutsch, Polnisch)
  • Anpassbare Vorlagen (auch für informative E-Mails)
  • Unterstützung für roles und permissions (via Deadbolt 2)
  • Erholung Passwort Unterstützung

Es gibt eine Beispiel-App für Java darin. Sie können es in Ihre App integrieren.

+0

das sieht toll aus, danke! –

+0

Nur neugierig, könntest du mir einen kurzen Überblick geben, was ich ändern muss, damit es für Mongodb funktioniert? Ich denke, ich müsste jede SQL-Methode wie - play.find usw. entfernen und durch Morphium ersetzen? Ich frage nur, weil ich viel ändern müsste. Willst du nicht einen großen Fehler am Anfang machen –

+1

Sorry, ich kann dir nicht helfen in Thema 'MongoDB' und' Morphia' Ich denke, es ist die beste Idee, neue Frage zu starten, die genau die Reichweite davon anspricht. – biesior

12

Wie in den Zentask sample gezeigt, sollte Ihre Secured Klasse Security.Authenticator verlängern.

Damit wird es möglich, eine @Security.Authenticated Annotation entweder auf einem Controller oder auf einer Aktion zu setzen. Diese Anmerkung ermöglicht es, den Client auf eine andere Seite umzuleiten, wenn der Benutzer nicht ordnungsgemäß autorisiert wurde (durch Überschreiben der Security.Authenticator.onUnauthorized()-Methode).

Der Workflow ist die folgende:

  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

Ja danke Ich habe bereits das zentask Beispiel gelesen. Aber im Zentask-Beispiel wird onUnauthorized() oder getUsername() niemals verwendet, also rate ich, dass das playframework sie aufruft. Wie weiß das Spiel, wenn ein Benutzer autorisiert/nicht autorisiert ist? –

+0

Über die Methode getUsername(): Gibt null zurück, wenn der Benutzer nicht authentifiziert wurde http://www.playframework.org/documentation/api/2.0.2/java/play/mvc/Security.Authenticator.html#getUsername (play). mvc.Http.Context) –

+0

Ah okay danke. :) –

Verwandte Themen