2012-08-05 32 views
6

Próbuję zarządzać moim użytkownikiem za pomocą plików cookie. To nie jest takie proste, ponieważ nie ma absolutnie żadnej dokumentacji na ten temat.Java Play! 2 - Zarządzanie użytkownikami za pomocą plików cookie

Z pomocą próbki "zentask" Zrobiłem to:

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; 

    } 

używam go tak:

public static Result blank() throws Exception { 

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

    } 

Teraz mam kilka pytań/problemów:

  • 1.) Plik Cookie nie jest dektypowany i zawsze wygląda tak samo. np. bdb7f592f9d54837995f816498c0474031d44c1a-username% 3Akantaki

  • 2.) Co robi klasa Security.Authenticator?

  • 3.) Myślę, że zarządzanie użytkownikami za pomocą plików cookie jest bardzo częstym problemem, czy gra! 2.0 oferuje mi kompletne rozwiązanie? A może jest jakaś dokumentacja?

Odpowiedz

12

re jest także pełnym stosem dla authentication i authorization - Play Authenticate przez Joscha Feth. (Dostępny w GitHub)

Zawiera gotowy do użycia próbki dla aplikacji Java, która używa pojęcia securesocial + pełne Deadbolt 2 (Steve Chaloner) wsparcia. ma:

  • zbudowany w możliwości register i log in użytkowników z e-mail, Google, Facebook, Foursquare, Twitter, OpenId i dostawców niestandardowych.
  • Obsługa wielu języków (obecnie: angielski, niemiecki, polski)
  • dostosowania szablony (również dla informacyjnych e-maili)
  • Wsparcie roles i permissions (przez Deadbolt 2) wsparcie odzyskiwania
  • Hasło

Istnieje przykładowa aplikacja dla Javy. Możesz włączyć go do swojej aplikacji.

+0

to wygląda niesamowicie, dzięki! –

+0

Po prostu ciekawy, czy mógłbyś dać mi bardzo krótki przegląd tego, co muszę zmienić, aby działał w Mongodb? Sądzę, że musiałbym usunąć każdą metodę sql taką jak - play.find itd. I zastąpić ją morfiną? Pytam tylko dlatego, że musiałbym dużo zmienić. Nie chcę popełnić wielkiego błędu na początku –

+1

Niestety, nie mogę ci pomóc w temacie "MongoDB" i "Morphia". Myślę, że najlepiej jest zacząć nowe pytanie, zwracając się dokładnie do jego zakresu. – biesior

12

Jak pokazano w Zentask sample, klasa Secured powinien wystawać Security.Authenticator.

Dzięki temu można umieścić adnotację @Security.Authenticated albo na kontrolerze, albo na akcie. Ta adnotacja pozwala przekierować klienta na inną stronę, jeśli użytkownik nie jest prawidłowo autoryzowany (przez przesłonięcie metody Security.Authenticator.onUnauthorized()).

Sposób pracy jest następujący:

  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

Tak, dziękuję, przeczytałem już przykład zentask. Ale w przykładzie zentask, onUnauthorized() lub getUsername() nigdy nie są używane, więc domyślam się, że ramka odtwarzająca je wywołuje. W jaki sposób gra wie, kiedy użytkownik jest autoryzowany/nieautoryzowany? –

+0

Za pomocą metody getUsername(): zwraca wartość null, jeśli użytkownik nie jest uwierzytelniony http://www.playframework.org/documentation/api/2.0.2/java/play/mvc/Security.Authenticator.html#getUsername(play. mvc.Http.Context) –

+0

Ah OK, dziękuję. :) –

Powiązane problemy