Vaadin 多用户会话管理

Vaadin multi user session management

我正在创建一个带有 spring-boot 和 spring-security 的 Vaadin 应用程序。有一些可以修改的 gui 元素。如何实现用户对此有自己的看法?我认为框架已经处理的问题是,当不同的用户登录时,他会看到第一个用户的修改。

我想用VaadinSessions之类的来支持多个用户同时,修改自己的独占视图。

我不知道该怎么办。我尝试添加到布局:

 @VaadinSessionScope

我天真的方法是这样的:在我自己的地图中处理不同的用户/会话。但我越是思考这个解决方案,就越是问自己为什么不使用框架中的这些功能。如何分离视图/用户?

这是我的观点class:

@PageTitle("ACME")
@Theme(value = Lumo.class, variant = Lumo.LIGHT)
@Route
@VaadinSessionScope
public class ACMEView extends VerticalLayout {

Vaadin 以相反的方式工作。如果您定义例如一个视图组件 class 和 @Route,那么当每个用户导航到该视图时,他们都会有一个单独的实例。它实际上什至更进一步 - 如果用户在多个浏览器选项卡中打开相同的视图,那么他们将拥有该组件的多个实例 class.

您需要在组件和数据之间进行分离。如果您将 @VaadinSessionScope 放在 组件 class 上,那么每个用户都将拥有该组件的自己的实例。用户将彼此隔离,但如果用户打开多个浏览器选项卡,仍会导致问题。出于这个原因,您应该几乎总是避免在组件 classes.

上使用范围注释

多个用户看到相同数据的原因是 数据 是共享的,与组件实例无关。这取决于您如何配置这些组件,而不是基于组件本身的生命周期。在 Grid 的情况下,这与您传递给 setDataProvidersetItems 方法的内容有关。我怀疑您的数据要么存储在某处的 static 字段中,要么存储在范围更广的单独 Spring bean 中(Spring 中的默认范围是单例)。您可能希望将 @VaadinSessionScope 应用于保存数据的 bean,而不是应用于保存组件自身配置的组件 class。