Доступ к закладкам, доступным только зарегистрированным пользователям в Wicket - PullRequest
2 голосов
/ 17 марта 2011

У меня есть несколько страниц, которые должны быть доступны только при входе пользователя в систему. Чтобы URL-адреса имели смысл, а также чтобы пользователь мог их добавлять в закладки, я сделал их закладками в Wicket.

Теперь возникает проблема, что если пользователь заходит на просмотр этих страниц, но еще не вошел в систему. Вызывается конструктор, который занимает PageParameters на моей странице.

Мой подход будет следующим:

  • Для всех страниц, которые должны быть доступны только вошедшим в систему, но которые можно добавить в закладки, поместите оператор if в этот конструктор, чтобы проверить, вошел ли пользователь в систему или нет.
  • Если пользователь не авторизован:
    • Храните (a) this.class (b) Параметры страницы в специальном месте в сеансе
    • setReponsePage чтобы быть моей страницей входа
    • На странице входа в систему, если вход в систему успешен, проверьте, установлены ли эти специальные атрибуты в сеансе, и если да, то setResponsePage будет классом / параметрами желаемого закладочного URL

Правильный ли этот подход? Кажется, что это немного лишняя / ручная работа (хотя и не слишком много!), Но Wicket предоставляет много полезных вещей "из коробки": поэтому мой вопрос: это необходимо или есть какой-то объект Wicket? я не знаю, чем я могу воспользоваться?

1 Ответ

8 голосов
/ 17 марта 2011

Вы должны использовать IAuthorizationStrategy для защиты своих страниц. См., Например, wicket-auth-role для упрощенной библиотеки на основе ролей.

Когда Wicket пытается отобразить страницу, которая сопоставлена ​​с URL-адресом закладки пользователя, он заметит, что пользователь еще не вошел в систему (поскольку в сеансе нет назначенного ему пользователя), сохраните текущий запрошенный URL-адрес, перенаправьте на страницу входа и дождитесь, пока пользователь правильно войдет в систему. В onSubmit вашей формы входа в систему вы затем позвоните

if(!continueToOriginalDestination()) {
    setResponsePage(SomeReasonableDefaultPageLikeYourHomePage.class);
}

См. Пример «Аутентификация» в проекте Wicket examples ( онлайн-демонстрация здесь )

continueToOriginalDestination даст Wicket команду отобразить исходный URL-адрес, запрошенный пользователем, если он сохранен, и в противном случае вернет false.

...