2016-08-09 3 views
0

admin, service, user, guest, admin이 데이터베이스에 생성되면 처음으로 admin 로그인에 비밀번호를 변경해야합니다. 비밀번호 변경 양식으로 리디렉션하고 싶습니다. 관리자는 onAuthFailure에서 리디렉션을 설정했지만 서비스, 사용자, 게스트는 일부 작업에서 인증이 아니며 비밀번호 변경 양식을 리디렉션하는 것이 좋습니다. 모든 역할에 대해 다른 링크를 리디렉션하려면 어떻게해야합니까? , 나는 방금 2 일 만에 deadbolt에 관한 문서를 읽었습니다. 더 이해할 수 없습니까, 영어를 유감스럽게 생각합니다.Deadbolt play java 처음으로 로그인 할 때 비밀번호를 변경하십시오.

감사합니다.

답변

0

DeadboltHandler 구현 내에서 onAuthFailure 메서드는 getSubject을 사용하여 현재 사용자와이를 통해 사용자가 보유한 역할을 얻을 수 있습니다.

public class MyDeadboltHandler implements DeadboltHandler { 
    private final DeadboltExecutionContextProvider executionContextProvider; 
    private final DeadboltAnalyzer analyzer; 

    @Inject 
    public MyDeadboltHandler(final ExecutionContextProvider ecProvider, 
          final DeadboltAnalyzer analyzer) { 
     this.executionContextProvider = ecProvider.get(); 
     this.analyzer =analyzer; 
    } 

    public CompletionStage<Result> onAuthFailure(Http.Context context, 
               Optional<String> content) { 
     final ExecutionContext executionContext = executionContextProvider.get(); 
     final ExecutionContextExecutor executor = HttpExecution.fromThread(executionContext); 
     return getSubject(context).thenApplyAsync(maybeSubject -> 
      maybeSubject.map(subject -> analyzer.hasRole(maybeSubject, "admin") ? /*go to admin section*/ 
                       : /*go to non-admin section*/) 
         .orElseGet(() -> /*no user present*/), 
            executor); 
    } 

    // other methods 
} 

어디에서나 해당 예제에 주석이 있습니다. /*go to admin section*/Result으로 교체해야합니다.

DeadboltAnalyzer에는 다른 방법이 있으므로, 필요한 경우 analyzer.hasRole(maybeSubject, "admin")보다 복잡한 검사를 할 수 있습니다.

+0

코드를 보내 주셔서 감사합니다.하지만 람다 표현식과 동시 처리에 익숙하지 않아서'/ * 관리자 섹션 * /'을 Result로 바꾸면 괜찮습니다. 그러나'/ * 사용자가 없습니다 * /' 결과, 오류로 바꿉니다. 내 바보 미안해. –

관련 문제