2016-08-09 2 views
0

私は4つのグループを持っています:管理者、サービス、ユーザー、ゲスト、管理者がデータベースに作成されました。 adminの必要性、私はonAuthFailureでリダイレクトを設定しましたが、サービス、ユーザ、ゲストは何らかのアクションで認証ではなく、リダイレクトパスワードフォームをリダイレクトして、良いアイデアを持っています。私は2日でデッドボルトについての文書を読んだだけで、もっと理解できないのでしょうか、私の英語には申し訳ありません。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

ありがとうございます。しかし、私はlambda式と同時実行に慣れていません。 '/ *管理セクションに移動* /'をResultに置き換えればOKですが、 '/ * no user present * /'結果、エラーで置き換えます。私のばかげて申し訳ありません。 –

関連する問題