Обработка перенаправления на определенную страницу
-
23-12-2019 - |
Вопрос
я использую Засов для авторизации.Мне нужно перенаправить пользователя, если он присутствует (subjectPresent
).Например, этот контроллер отображает страницу регистрации:
public static Result signup() {
return ok(signup.render())
}
Но если пользователь уже присутствует (то есть он уже зарегистрирован), указанный выше контроллер должен перенаправить его на страницу своего профиля: return ok(profilePage.render())
Как это сделать с помощью аннотации?
Решение
Deadbolt на самом деле не предназначен для такого рода условного переключения, но вы можете взломать его следующим образом:
- Создайте еще один DeadboltHandler, назовите его примерно так: ObjectPresentHandler.
- Реализуйте метод subjectPresentHandler#onAuthFailure для перенаправления на страницу профиля.
Аннотируйте свой метод регистрации с помощью
@SubjectNotPresent(обработчик=SubjectPresentHandler.class)
Это приводит к сбою авторизации, если пользователь присутствует.Затем это вызовет ObjectPresentHandler#onAuthFailure для получения результата.
Однако лично я бы рассмотрел возможность добавления простого теста в метод регистрации по принципу
public static Result signup() {
Result result;
User user = // however you normally get your user
if (user == null) {
result = ok(signup.render())
} else {
result = redirect(routes.<your profile view method>);
}
return result;
}