Deadbolt play java Сменить пароль при первом входе

У меня есть 4 группы: администратор, сервис, пользователь, гость, администратор создается в базе данных, при первом входе администратора требуется смена пароля, я хочу перенаправить на форму, изменить пароль, и это нужно только администратору, я установил перенаправление в onAuthFailure, но сервис Пользователь, гость, который не выполняет аутентификацию в каком-либо действии и перенаправляет изменение пароля, имеет хорошую идею, пожалуйста, скажите мне, что я должен сделать для каждой роли, перенаправить другую ссылку? Я только что прочитал документ о засове за 2 дня, могу я не понять больше, извините за мой английский.

Благодарю.

1 ответ

Решение

В пределах 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") если необходимо.

Другие вопросы по тегам