Authentication Vaadin 7-将属性设置并获取到Vaadin会话中

Authentication Vaadin 7-将属性设置并获取到Vaadin会话中,authentication,attributes,vaadin,Authentication,Attributes,Vaadin,我目前正在使用Vaadin 7创建RIA,并且正在设计登录功能 应用程序设计很简单: 一个UI类执行不同视图类的导航。特别是,第一个显示的视图是LoginView类,用户经过身份验证后,UI类将用户重定向到MainView 在身份验证之后,我希望将用户数据(例如姓名)设置到会话中,并始终将其显示在Web应用程序的右上角(无论是什么特定视图) 作为一名乞丐,我阅读了瓦丁的书,我首先使用了第11章中所示的方案,但它似乎没有像预期的那样工作,可能是因为我使用的是视图导航方案 因此,我采用以下方法: 身

我目前正在使用Vaadin 7创建RIA,并且正在设计登录功能

应用程序设计很简单:

一个UI类执行不同视图类的导航。特别是,第一个显示的视图是LoginView类,用户经过身份验证后,UI类将用户重定向到MainView

在身份验证之后,我希望将用户数据(例如姓名)设置到会话中,并始终将其显示在Web应用程序的右上角(无论是什么特定视图)

作为一名乞丐,我阅读了瓦丁的书,我首先使用了第11章中所示的方案,但它似乎没有像预期的那样工作,可能是因为我使用的是视图导航方案

因此,我采用以下方法:

身份验证正确完成后,LoginView将尝试使用以下代码将用户数据存储为VaadinSession属性:

VaadinSession.getCurrent().setAttribute("name", name);
然后,UI导航到MainView并尝试使用以下命令获取用户的名称:

VaadinSession.getCurrent().getAttribute("name");
但它会得到一个空值。

有人知道为什么吗?谢谢你的帮助


谢谢。

在扩展UI的主类上使用@PreserveOnRefresh注释。 然后可以将变量数据存储在主类中。
您可以使用((MyUIClass)UI.getCurrent()).getSomeVariable方法表达式从任何位置(在任何视图中)给出它。

我猜您为什么会得到空值。在大多数现代Vaadin教程中,导航页面是作为对象在UI中首先创建的。如果在此过程中实例化的其中一个视图是MainView。如果显示名称的标签在类的构造函数中设置了字符串,则行:

label.setValue(VaadinSession.getCurrent().setAttribute(“name”,name))将为空


您需要更新@override
enter()函数中显示用户字符串的标签,或者以其他方式处理它。

我建议将这些值存储在HTTP会话中

VaadinServletService.getCurrentServletRequest().getSession().setAttribute("name", name);


尝试使用UI.getCurrent().getSession().setAttribute(“name”,name)我也做了同样的事情,效果很好。您是否正在检查是否输入空值?需要更多示例来帮助,请尝试发布可重新创建的独立应用程序。这对我也适用。我认为您的name-variable有问题。类似的:答案并不正确。在Vaadin 7中,用户可以打开多个web浏览器窗口/选项卡,每个窗口/选项卡显示同一UI类(甚至其他UI类)的各自实例。所有这些窗口/选项卡都属于同一会话。换句话说,vaadin7现在有两个级别的作用域:一个VaadinSession对象有一个或多个UI对象。看看这两个范围。对于用户身份验证,您需要更高级别的作用域,即VaadinSession,而不是UI。另外,请看那篇关于线程安全的文章!!
VaadinServletService.getCurrentServletRequest().getSession().getAttribute("name");