session - Vaadin 在另一个浏览器/选项卡/系统中关闭同一用户的 UI

标签 session authentication vaadin7

我正在 Vaadin 7 中做一个项目。我需要实现如下所示的登录功能。

用户“A”登录到系统“1”。他再次登录到另一个系统“2”。现在我想知道如何关闭系统“1”上的 UI。

我尝试了一些方法,如果是同一个浏览器,可以关闭用户界面。但是,对于不同的系统/浏览器。我不知道。

我的代码:

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();

            }
}

有人可以帮我吗?

最佳答案

我遇到了与您类似的情况,我需要显示有关所有 session 的一些信息。我所做的是创建自己的 Servlet,使用静态 ConcurrentHashmap 来扩展 VaadinServlet 来保存我的 session 信息,并使用 SessionDestroyListener 来在注销时从 map 中删除任何信息。最初,我还有一个 SessionInitListener,我在 HashMap 中添加了信息,但我意识到我只有身份验证后的用户信息,因此我将这部分移动到处理登录的页面。

我想你可以做类似的事情,或者至少这应该让你开始:

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"));
    }
  }
}

关于session - Vaadin 在另一个浏览器/选项卡/系统中关闭同一用户的 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18594631/

相关文章:

页面之间的 PHP Session Id 变化

svn - git svn : password for svn is not stored

c# - Asp.net Identity - 如何在不考虑鉴别器的情况下登录

focus - Vaadin AceEditor 焦点问题

java - 按主机名设置 vaadin 主题

保存在 ramdisk 中的 php session

python - 如何在 python (Django) 中取消设置(删除)POST 变量

php - PHP中的SSH连接和命令

vaadin - 如何在 DateField 上定义禁用日期?

php - 如何检查 PHP session 是否存在?