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