2012-08-05 2 views
6

쿠키를 통해 내 사용자를 관리하려고합니다. 이 주제에 대한 문서가 전혀 없기 때문에 쉽지 않습니다. 샘플의 도움으로Java Play! 2 - 쿠키를 사용한 사용자 관리

는 "zentask"나는이 만든 :

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; 

    } 

를 나는 이런 식으로 사용하고 있습니다 :

    :
    public static Result blank() throws Exception { 
    
         if (Secured.isAuthorized()) 
          return ok(Secured.getUsername()); 
         else 
          return ok(views.html.login.form.render(loginForm)); 
    
        } 
    

    지금 내가 몇 가지 질문/문제가
  • 1.) 쿠키는 dectypted되지 않으며 항상 동일하게 보입니다. 예) bdb7f592f9d54837995f816498c0474031d44c1a-username % 3Akantaki

  • 2.) Security.Authenticator 클래스는 무엇을합니까?

  • 3) 3. 쿠키를 통한 사용자 관리가 매우 일반적인 문제이며, 재생할 수 있다고 생각합니다. 2.0은 나에게 완벽한 해결책을 제공합니까? 아니면 적어도 몇 가지 문서가 있습니까?

    Zentask sample에 나타낸 바와 같이

답변

12

Joscha Feth의 authenticationauthorization - Play Authenticate의 전체 스택입니다. (GitHub에서 구입 가능)

이 지원 (스티브 Chaloner에 의해) + 전체 Deadbolt 2securesocial의 개념을 사용하는 Java 용 즉시 사용 샘플을 포함합니다. 그것은이 있습니다

  • 전자 메일, 구글, 페이스 북, 포 스퀘어, 트위터, 오픈 ID 및 사용자 지정 공급자와 registerlog in 사용자에게 가능성을 만들었습니다.
  • 다국어 지원 (현재 : 영어, 독일어, 폴란드어) (Deadbolt 2을 통해) (또한 정보 전자 메일에 대한)
  • 사용자 정의 템플릿
  • roles에 대한 지원 및 permissions
  • 암호 복구 지원

Java 용 샘플 앱이 있습니다. 앱에 통합 할 수 있습니다.

+0

놀라운 결과입니다. 감사합니다! –

+0

궁금한 점이 있는데 몽고브 (Mongodb)에서 작동하도록 바꾸려면 무엇이 필요한지 간단히 요약 해 주시겠습니까? 나는 - play.find 등 모든 SQL 메서드를 제거하고 morphia로 바꾸어야 할 것 같아? 나는 내가 많이 바꿀 필요가 있기 때문에 단지 묻고있다. 처음에는 커다란 실수를하고 싶지 않아요. –

+1

죄송합니다. MongoDB와 Morphia라는 주제에서 당신을 도울 수 없습니다. 새로운 질문을 시작하여 정확히 그 범위를 다루는 것이 가장 좋은 생각이라고 생각합니다. – biesior

12

, 당신의 Secured 클래스는 Security.Authenticator를 확장해야합니다.

이렇게하면 컨트롤러 또는 동작에 @Security.Authenticated 주석을 삽입 할 수 있습니다. 이 주석을 사용하면 사용자가 올바르게 승인되지 않은 경우 (Security.Authenticator.onUnauthorized() 메서드를 재정 의하여) 클라이언트를 다른 페이지로 리디렉션 할 수 있습니다.

  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

예, 이미 zentask 예제를 읽었습니다. 하지만 zentask 예제에서는 onUnauthorized() 또는 getUsername()이 사용되지 않으므로 playframework에서 호출하는 것 같습니다. 사용자가 승인/비 승인되었을 때 어떻게 알 수 있습니까? –

+0

getUsername() 메소드를 통해 : 사용자가 인증되지 않은 경우 null을 반환합니다. http://www.playframework.org/documentation/api/2.0.2/java/play/mvc/Security.Authenticator.html#getUsername(play. mvc.Http.Context) –

+0

아, 감사합니다. :) –

관련 문제