我的客户希望我实现一项功能,该功能会自动强制用户注销,同一用户从另一个浏览器登录时。例如:用户通过Firefox浏览器成功登录后,IE会话将停止。任何进一步的行动将被重定向到登录页面。如何强制用户注销同一用户从另一个浏览器登录
任何想法?
我的客户希望我实现一项功能,该功能会自动强制用户注销,同一用户从另一个浏览器登录时。例如:用户通过Firefox浏览器成功登录后,IE会话将停止。任何进一步的行动将被重定向到登录页面。如何强制用户注销同一用户从另一个浏览器登录
任何想法?
您可以实现会话监听器,将用户名与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));
}
...
}
你能解释这一行吗? ().getId(),se.getSession()); – 2014-09-03 09:39:21
applicationScopeMap是一个Map
可以实现的请求过滤器,它访问一个单/静态会话映射,键与用户ID和重视与会话ID。如果当前请求的用户的会话ID与存储的用户的会话ID不匹配,您将强制它注销。 – 2014-09-03 08:52:31