在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替換'/ *轉到管理部分* /'時,他們可以,但是'/ *沒有用戶存在* /'替換爲Result,錯誤。對不起,我的愚蠢。 –