La page principale de mon Vaadin 14 est une vue principale avec la route racine.

MainView est utilisé comme "modèle" pour l'autre vue (avec layout = MainView.class) donc je le vois plus comme une vue "abstraite" qui ne devrait pas être initialisée par elle-même et n'est utilisée que pour les autres vues comme mise en page.

Maintenant, le problème: si un utilisateur accède au MainView, le BeforeEnterEvent est appelé APRÈS le constructeur . Cela peut entraîner des exceptions levées car l'utilisateur n'est pas encore authentifié et le constructeur exécute déjà des choses comme la construction des onglets.

Existe-t-il un moyen d'empêcher l'utilisateur d'accéder à l'itinéraire de MainView ou à un événement qui est exécuté avant l'appel du constructeur? L'accès à la vue n'est autorisé que si l'utilisateur est authentifié.

@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 {
2
Michael Kemmerzell 14 janv. 2020 à 13:21

1 réponse

J'ai pu le corriger temporairement avec une vérification supplémentaire de l'authentification. Ce n'est peut-être pas la meilleure solution, mais cela fonctionne pour l'instant. À l'avenir, la réponse de @ Tazavoo devrait être mise en œuvre.

public MainView() {
    super();
    if (!isAuthenticated()) 
       return;

    setupView();
}
0
mkemmerz 15 janv. 2020 à 13:23