Обработка входа в систему с помощью веб-приложения Vaadin Flow для всех макетов по всему миру и для URL-адресов маршрутов. - PullRequest
0 голосов
/ 12 ноября 2018

Ваадин 8

В Vaadin 8 в моем подклассе UI я обрабатывал вход в систему, проверяя, имел ли пользовательский сеанс атрибут, отмечающий, успешно ли они вошли в систему или нет. В противном случае мой подкласс UI отображал макет входа в систему, а не другой контент с параметрами навигации, такими как строка меню и кнопки, которые переключают макет в этом пользовательском интерфейсе.

Ваадин 10 +

В Vaadin 10 и более поздних версиях Vaadin Flow класс UI, по-видимому, автоматически обрабатывается Vaadin таким образом, который прозрачен для меня, разработчика приложений. Теперь классовый подход @Route и Router предлагается как способ навигации между формами, управляемый различными URL-адресами, прикрепленными к каждому макету. Одним из преимуществ является возможность пользователю отмечать местоположение в приложении в дружественном веб-стиле.

Глобальная проверка

➥ Как Vaadin Flow обрабатывает глобальную проверку того, что пользователь вошел в систему перед отображением любого другого контента?

Подкласс UI, как в Vaadin 8

Должен ли я следовать подходу Vaadin 8, написав подкласс UI? Если так, то как установить мой подкласс UI вместо UI, по-видимому, автоматически размещаемого Vaadin Flow?

Следую ли я примеру , показанному в руководстве с определением сервлета, и как обсуждалось в , этом другом вопросе ?

BeforeEnterEvent

Или я должен что-то делать с BeforeEnterEvent, обсуждаемым в руководстве по жизненному циклу маршрутизации ? Хотя в верхней части этой страницы есть краткое упоминание о том, что слушатели запускают экземпляр UI, примеры на остальной части страницы содержат код на макете, а не UI. Поэтому я не понимаю, как обрабатывать глобальные проверки во всех моих текущих и будущих макетах, определенных в моем приложении.


Мой вопрос не имеет ничего общего с хранением паролей, учетных данных, хэшей и солью и т. Д. Я спрашиваю о способе изящной проверки завершения входа в систему для блокировки / предоставления доступа к содержимому веб-приложения Vaadin.

1 Ответ

0 голосов
/ 12 ноября 2018

Есть несколько различных альтернатив, которые могут быть полезны для вас, немного в зависимости от того, как вы структурировали свое приложение.

  1. Заставьте ваш класс макета реализовать BeforeEnterObserver. Это действительно простой подход, если у вас есть только один основной макет для всего приложения. Один недостаток заключается в том, что не будет проверок для любого класса @Route, который вы не настроили для прямого или косвенного использования вашего основного макета.
  2. Реализуйте RouterLayout.showRouterLayoutContent в своем основном макете (вместо того, чтобы полагаться на реализацию по умолчанию) и выполняйте там проверки. Это опять-таки работает только тогда, когда основной макет фактически используется для всех видов, но может оказаться сложным, если между ними есть промежуточные макеты.
  3. Определите свой собственный класс AbstractView, который самостоятельно выполняет контроль доступа для каждого экземпляра. Это снова требует, чтобы вы всегда помнили использовать AbstractView для всех своих маршрутов.
  4. Зарегистрируйте пользовательский интерфейс BeforeEnterListener, который выполняет проверки доступа. Это немного сложнее в настройке, так как вам понадобится VaadinServiceInitListener, который добавляет UIInitListener, который добавляет фактического слушателя. С другой стороны, этот подход способен перехватывать любое навигационное событие независимо от вложенности макета и не требуя специального класса представления.
...