Обработка перенаправления на определенную страницу

Я использую Deadbolt для авторизации. Мне нужно перенаправить пользователя, если он присутствует (subjectPresent). Например, этот контроллер отображает страницу регистрации:

public static Result signup() {
     return ok(signup.render())
 }

Но если пользователь уже присутствует (тогда он уже зарегистрирован), указанный выше контроллер должен перенаправить его на страницу своего профиля: return ok(profilePage.render())

Как это сделать с аннотацией?


person Fred K    schedule 18.11.2013    source источник


Ответы (1)


Deadbolt на самом деле не для такого условного переключения, но вы можете взломать его следующим образом:

  1. Создайте еще один DeadboltHandler, назовите что-то вроде SubjectPresentHandler.
  2. Реализуйте метод SubjectPresentHandler#onAuthFailure для перенаправления на страницу профиля.
  3. Аннотируйте свой метод регистрации с помощью

    @SubjectNotPresent (обработчик = SubjectPresentHandler.class)

Это вызывает сбой авторизации, если присутствует пользователь. Затем это вызовет SubjectPresentHandler#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;
}
person Steve Chaloner    schedule 18.11.2013
comment
Привет, Стив, спасибо за ответ (и за плагин). Не могли бы вы также взглянуть на этот вопрос? Спасибо - person Fred K; 18.11.2013