使用Vaadin Flow网络应用处理登录,全球所有布局以及“路线” URL的登录

时间:2018-11-11 23:09:59

标签: session login vaadin vaadin-flow

Vaadin 8

在Vaadin 8中,在我的UI子类中,我通过检查用户的会话是否带有指示他们是否已成功登录的属性来处理登录。如果没有,我的UI子类将显示登录布局,而不显示其他具有导航选项的内容,例如菜单栏和可在该UI中切换布局的按钮。

Vaadin 10 +

在Vaadin 10和更高版本的Vaadin Flow中,UI类显然是由Vaadin自动处理的,这对我来说是应用程序开发人员可以理解的。现在,建议使用@RouteRouter类方法作为在表单之间导航的方法,该方法由附加到每个布局的不同URL驱动。一个好处是用户能够以友好的网络样式在应用程序中为位置添加书签。

全局检查

➥在Vaadin Flow中,在显示任何其他内容之前,如何处理用户已登录的全局检查

子类UI,例如Vaadin 8

我是否应该按照Vaadin 8的方法编写UI的子类?如果是这样,如何安装UI的子类来代替显然由Vaadin Flow自动放置的UI

我是否遵循示例shown in the manual的Servlet定义,并且如this other Question中所述?

BeforeEnterEvent

还是我应该对routing lifecycle tutorial中讨论的BeforeEnterEvent做些事情?尽管该页面的顶部简要介绍了UI实例上触发的侦听器,但该页面其余部分的示例都涉及布局上的代码,而不是UI。因此,我不明白如何处理应用程序中定义的所有当前和将来布局的全局检查。


我的问题与存储密码,凭据,哈希和盐等无关。我正在问一种方法,以优雅地检查登录是否已完成,以阻止/授予对Vaadin Web应用程序内容的访问。

>

1 个答案:

答案 0 :(得分:2)

有两种不同的选择可能对您有用,这取决于您应用程序的结构。

  1. 使您的主布局类实现BeforeEnterObserver。只要您对整个应用程序只有一个主要布局,这是一种非常简单的方法。缺点之一是不会检查未配置为直接或间接使用主布局的任何@Route类。
  2. 在主布局中实施RouterLayout.showRouterLayoutContent(而不是依赖于默认实现),然后在此处进行检查。这仅在主布局实际用于所有视图时才有效,但是如果在两者之间使用中间布局,可能会带来挑战。
  3. 定义您自己的AbstractView类,该类自己为每个实例执行访问控制。这再次要求您记住所有路线始终使用AbstractView
  4. 注册一个UI范围的BeforeEnterListener来执行访问检查。设置起来有点复杂,因为您需要添加一个VaadinServiceInitListener并添加一个实际监听器的UIInitListener。另一方面,这种方法能够拦截任何导航事件,而与布局嵌套无关,并且不需要特殊的视图类。