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