在Vaadin处理会话

时间:2015-02-01 14:07:24

标签: java session authentication vaadin vaadin7

我有一个以Vaadin开头的user login应用程序,但问题是Vaadin是会话处理,因为我可以使用相同的{2个不同浏览器打开两个会话{1}}这是不可能做到的。但是除了这个topic之外我没有找到任何关于它的文档,但它没有正常工作,因为数据没有正确地保存在login中。有人遇到了同样的问题吗?

3 个答案:

答案 0 :(得分:4)

Vaadin 7默认工作,以便在打开新的浏览器选项卡(或刷新选项卡)时每次创建新的UI实例。您应该将有关当前用户的信息存储到VaadinSession或标准HttpSession,如果会话包含用户信息,请检入UI.init()

要将信息存储到VaadinSession,可以说:

VaadinSession.getCurrent().setAttribute("currentUser", currentUser)

可以在Vaadin中按如下方式访问HttpSession:

VaadinSession.getCurrent().getSession()

请注意VaadinSession存储在HttpSessionHttpSession如果从同一个war文件和用户部署了多个Vaadin servlet,则VaadinSession可以包含多个{{1}}同时使用它们。

答案 1 :(得分:2)

如何防止并发登录?

我使用自生成的登录令牌跟踪登录。长度在32到128个字节之间的随机字符串,存储在cookie和后端数据库中,通常位于用户的帐户下。

如果用户(A)与用户(B)共享其登录凭据,则会为新登录生成新的登录令牌,并将其存储在cookie中并在备份数据库中进行更新。

如果用户(A)(可能已经登录)尝试在用户(B)刚刚登录时执行操作,则用户(A)的会话将被销毁,并且她&# 39;在后端测试确认她的登录令牌不匹配后,将被重定向到登录屏幕。

将Sessions和Logins视为两个不同的东西。会话可以整天生成,但登录状态应存储在中央存储中。

答案 2 :(得分:0)

您可以将所有已记录的用户保存到静态设置。静态变量是全局共享的。在启动应用程序中,检查集合是否已登录。