Главная страница моего Vaadin 14 — это MainView с корневым маршрутом.
MainView
используется как «шаблон» для другого представления (с layout = MainView.class
), поэтому я вижу его скорее как «абстрактное» представление, которое не должно инициализироваться само по себе и используется только для других представлений в качестве макета.
Теперь проблема: если пользователь обращается к MainView
, BeforeEnterEvent
вызывается ПОСЛЕ конструктора. Это может привести к возникновению исключений, поскольку пользователь еще не аутентифицирован, а конструктор уже выполняет такие действия, как создание вкладок.
Есть ли способ запретить пользователю доступ к маршруту MainView или событию, которое выполняется до вызова конструктора? Доступ к представлению разрешен только в том случае, если пользователь прошел аутентификацию.
@Route("")
public class MainView extends AppLayout implements BeforeEnterObserver {
public MainView() {
super();
// Creates all the Tabs that are used in the MainView, may throw exception if the user calls the URL of this View before authenticated
setupView();
}
...
@Override
public void beforeEnter(BeforeEnterEvent event) {
// Reroute to Login if User is NOT authenticated
}
}
@Route(value = "foo", layout = MainView.class)
public class OtherView {
Обновление:
Исправление выпущено как экспериментальная функция в Vaadin 14.2.