session - que - Vaadin cierra la interfaz de usuario del mismo usuario en otro navegador/pestaña/sistema
navegacion por pestañas google chrome (1)
Tengo una situación similar a su donde necesito mostrar información sobre todas las sesiones. Lo que hice fue crear mi propio Servlet extendiendo el VaadinServlet con un chorro de señal estático simultáneo para guardar la información de mi sesión, y un SessionDestroyListener para eliminar cualquier información del mapa al cerrar la sesión. Inicialmente también tenía un SessionInitListener donde agregué la información en el hashmap, pero me di cuenta de que solo tenía la información del usuario después de la autenticación, así que moví esta parte a la página que maneja el inicio de sesión.
Supongo que podrías hacer algo similar, o al menos esto debería ayudarte a empezar:
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"));
}
}
}
Estoy haciendo un proyecto en Vaadin 7. En eso necesito implementar algo como a continuación para el inicio de sesión.
Un usuario ''A'' ha iniciado sesión en un sistema ''1''. Y de nuevo inicia sesión en otro sistema ''2''. Ahora quiero saber cómo cerrar la interfaz de usuario en el sistema ''1''.
Intenté algo y puedo cerrar la interfaz de usuario, si es el mismo navegador. Pero, para diferentes sistemas / navegador. No tengo idea.
Mi código:
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();
}
}
Alguien me puede ayudar en esto?