我正在 Vaadin 7 中做一个项目。我需要实现如下所示的登录功能。
用户“A”登录到系统“1”。他再次登录到另一个系统“2”。现在我想知道如何关闭系统“1”上的用户界面。
我尝试了一些方法,如果是同一个浏览器,可以关闭用户界面。但是,对于不同的系统/浏览器。我不知道。
My Code:
private void closeUI(String attribute) {
for (UI ui : getSession().getUIs()) {
if(ui.getSession().getAttribute(attribute) != null)
if(ui.getSession().getAttribute(attribute).equals(attribute))
ui.close();
}
}
有人能帮我吗?
我的情况与您类似,我需要显示有关所有会话的一些信息。我所做的是创建自己的 Servlet,使用静态 ConcurrentHashmap 来扩展 VaadinServlet 来保存我的会话信息,并使用 SessionDestroyListener 来在注销时从地图中删除任何信息。最初,我还有一个 SessionInitListener,我在哈希图中添加了信息,但我意识到我只有身份验证后的用户信息,所以我将这部分移动到处理登录的页面。
我想你可以做类似的事情,或者至少这应该让你开始:
public class SessionInfoServlet extends VaadinServlet {
private static final ConcurrentHashMap<User, VaadinSession> userSessionInfo = new ConcurrentHashMap<>();
// this could be called after login to save the session info
public static void saveUserSessionInfo(User user, VaadinSession session) {
VaadinSession oldSession = userSessionInfo.get(user);
if(oldSession != null){
// close the old session
oldSession.close();
}
userSessionInfo.put(user, session);
}
public static Map<User, VaadinSession> getUserSessionInfos() {
// access the cache if we need to, otherwise useless and removable
return userSessionInfo;
}
@Override
protected void servletInitialized() throws ServletException {
super.servletInitialized();
// register our session destroy listener
SessionLifecycleListener sessionLifecycleListener = new SessionLifecycleListener();
getService().addSessionDestroyListener(sessionLifecycleListener);
}
private class SessionLifecycleListener implements SessionDestroyListener {
@Override
public void sessionDestroy(SessionDestroyEvent event) {
// remove saved session from cache, for the user that was stored in it
userSessionInfo.remove(event.getSession().getAttribute("user"));
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)