2014-09-03 27 views
0

我的客户希望我实现一项功能,该功能会自动强制用户注销,同一用户从另一个浏览器登录时。例如:用户通过Firefox浏览器成功登录后,IE会话将停止。任何进一步的行动将被重定向到登录页面。如何强制用户注销同一用户从另一个浏览器登录

任何想法?

+0

可以实现的请求过滤器,它访问一个单/静态会话映射,键与用户ID和重视与会话ID。如果当前请求的用户的会话ID与存储的用户的会话ID不匹配,您将强制它注销。 – 2014-09-03 08:52:31

回答

2

您可以实现会话监听器,将用户名与JSESSIONID(因此会话对象)映射

public class SessionListener implements HttpSessionListener{ 

    @Override 
    public void sessionCreated(HttpSessionEvent se) { 
     se.getSession().getId(); 
     applicationScopeMap.put(se.getSession().getId(), se.getSession()); 
    } 
... 

那么当用户登录,你也应该与会话ID映射自己的用户名和检查他已经在地图和无效它在一个会话:

public String doLogin(){ 

     String sessionId = userSessionMap.get(username); 
     if(sessionId != null){ 
      applicationScopeMap.get(sessionId).invalidate(); 
     }else{ 
      userSessionMap.put(username, FacesContext.getCurrentInstance().getExternalContext().getSessionId(true)); 
     } 
     ... 
    } 
+0

你能解释这一行吗? ().getId(),se.getSession()); – 2014-09-03 09:39:21

+0

applicationScopeMap是一个Map ,您将使用该会话以会话ID作为密钥。 – faissalb 2014-09-03 09:40:55

相关问题