我有一个以Vaadin
开头的user login
应用程序,但问题是Vaadin
是会话处理,因为我可以使用相同的{2个不同浏览器打开两个会话{1}}这是不可能做到的。但是除了这个topic之外我没有找到任何关于它的文档,但它没有正常工作,因为数据没有正确地保存在login
中。有人遇到了同样的问题吗?
答案 0 :(得分:4)
Vaadin 7默认工作,以便在打开新的浏览器选项卡(或刷新选项卡)时每次创建新的UI实例。您应该将有关当前用户的信息存储到VaadinSession
或标准HttpSession
,如果会话包含用户信息,请检入UI.init()
。
要将信息存储到VaadinSession
,可以说:
VaadinSession.getCurrent().setAttribute("currentUser", currentUser)
可以在Vaadin中按如下方式访问HttpSession:
VaadinSession.getCurrent().getSession()
请注意VaadinSession
存储在HttpSession
中HttpSession
如果从同一个war文件和用户部署了多个Vaadin servlet,则VaadinSession
可以包含多个{{1}}同时使用它们。
答案 1 :(得分:2)
如何防止并发登录?
我使用自生成的登录令牌跟踪登录。长度在32到128个字节之间的随机字符串,存储在cookie和后端数据库中,通常位于用户的帐户下。
如果用户(A)与用户(B)共享其登录凭据,则会为新登录生成新的登录令牌,并将其存储在cookie中并在备份数据库中进行更新。
如果用户(A)(可能已经登录)尝试在用户(B)刚刚登录时执行操作,则用户(A)的会话将被销毁,并且她&# 39;在后端测试确认她的登录令牌不匹配后,将被重定向到登录屏幕。
将Sessions和Logins视为两个不同的东西。会话可以整天生成,但登录状态应存储在中央存储中。
答案 2 :(得分:0)
您可以将所有已记录的用户保存到静态设置。静态变量是全局共享的。在启动应用程序中,检查集合是否已登录。