gpt4 book ai didi

java - 如果用户尚未经过身份验证,如何处理对 View 的访问?

转载 作者:行者123 更新时间:2023-12-03 21:14:42 26 4
gpt4 key购买 nike

我的 Vaadin 14 的主页是带有根路由的 MainView。

MainView 用作其他 View 的"template"(使用 layout = MainView.class),所以我认为它更像是一个“抽象” View ,应该不会自行初始化,仅作为布局用于其他 View 。

现在的问题是:如果用户访问 MainView,则 BeforeEnterEvent 在构造函数之后被调用。这可能会导致抛出异常,因为用户尚未经过身份验证,并且构造函数已经执行了诸如构建选项卡之类的内容。

是否有办法阻止用户访问 MainView 的路由或调用构造函数之前执行的事件? 仅当用户经过身份验证时才允许访问 View。

@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 中发布.

最佳答案

The issue with instances being created too early实际上几个小时前就关门了。发布还需要一段时间。

话虽如此,实例方法不可能在构造函数之前调用,因此它不能解决您的特定情况。

我建议将您的 View 设置代码移至onAttach。如果您只想运行一次设置代码,可以使用 AttachEvent#isInitialAttach 仅在第一次附加时执行代码。

一旦我上面链接的问题被发布,您可以在构造函数中使用代码,但是在调用 beforeEnter 之前仍然会创建具有观察者方法的实例,只是不会创建 subview 实例。

如果不创建任何 View ,您可以在创建 UI 后立即使用 UI#addBeforeEnterListener 将监听器直接添加到 UI,利用 UI init listener 。同样,只有当修复程序发布后。

关于java - 如果用户尚未经过身份验证,如何处理对 View 的访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59731757/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com