禁止多人使用同一账号在系统上进行操作
2011-07-15 12:41
218 查看
在开发中遇到一个问题,系统内,同一个账号可以在不同的地方多个人同时进行登陆,操作。 要求是同一账号在系统内必须保持唯一,即,若是有人用同一账号登陆了,已登录账号失效 解决方案有两种: 一种是在系统中设置状态位,登陆签到,退出签退...至于异常退出,在旧的session销毁之前是无法再次进行登陆的,配置session的监听,在session销毁时,进行数据库操作,更改库里对应用户的状态位 另一种思想:在服务器上维护一个map,以用户唯一标识为主键,值为session,登录时判断该用户是否已在,不在的话加入,已在的话将原session销毁,放入现有的session,这样的话前面登陆的人就不能再进行操作了。下面实现后者,前者的话也是一样的实现:使用java.util.concurrent.ConcurrentHashMap
ConcurrentHashMap
是 Doug Lea 的 util.concurrent
包的一部分,它提供比Hashtable 或者 synchronizedMap 更高程度的并发性。而且,对于大多数成功的 get()操作它会设法避免完全锁定,其结果就是使得并发应用程序有着非常好的吞吐量。public class SessionHandler { private static final ConcurrentHashMap<String, HttpSession> sessionMap = new ConcurrentHashMap<String, HttpSession>(); //登陆时调用 public static synchronized void kickUser(String userId,HttpSession session) { HttpSession oldSession = sessionMap.get(userId); if(oldSession != null) { if(!oldSession.getId().equals(session.getId())) { try{oldSession .invalidate();}catch(Exception ex){}sessionMap.put(userId, session);return ;}}sessionMap.put(userId, session);}//正常退出时调用public static void removeUserFromSessionMap(String userId){if(sessionMap.containsKey(userId))sessionMap.remove(userId);}}至于异常的退出,只能等到会话超时了此时必须设置监听会话超时时session销毁时附带进行的操作public class SessionListener implements HttpSessionListener {public void sessionDestroyed(HttpSessionEvent sessionEvent){ HttpSession session = sessionEvent.getSession() ; SessionManager.removeUserFromSessionMap((String) session.getAttribute("userId"));}}web.xml中配置 <listener><listener-class>listener.SessionListener </listener-class></listener>
相关文章推荐
- 禁止多人使用同一账号在系统上进行操作[踢人操作]
- 禁止多人使用同一账号在系统上进行操作[踢人操作]
- 禁止多人使用同一账号在系统上进行操作
- 禁止多人使用同一账号在系统上进行操作[踢人操作]
- 禁止使用的字符操作相关系统函数级替换函数
- "Mac OS X"想要进行更改。键入管理员的名称和密码以允许执行此操作("Mac OS X"想使用系统钥匙串)
- "Mac OS X"想要进行更改。键入管理员的名称和密码以允许执行此操作("Mac OS X"想使用系统钥匙串)
- "Mac OS X"想要进行更改。键入管理员的名称和密码以允许执行此操作("Mac OS X"想使用系统钥匙串)
- 使用Struts2和jQuery EasyUI实现简单CRUD系统(六)——复选框进行多选删除操作
- 【ERP系统设计】【数据模块】3 使用Eclipse插件DB viewer进行MySQL数据库操作 .
- node.js 使用fs模块对系统文件及目录进行读写操作
- Linux账号管理之第一篇:对用户进行管理(一般都是系统管理员进行的操作) useradd usermod passwd userdel chage finger chfn chsh id 等命令
- [python]使用python进行LINUX系统操作
- 如何在一台电脑上使用两个git@osc的账号进行操作
- 使用PHP发送email进行账号激活或者密码修改操作
- Mac OS X想要进行更改。键入管理员的名称和密码以允许执行操作。想要使用“系统”钥匙串
- 【iOS】"OS X"想要进行更改。键入管理员的名称和密码以允许执行此操作("OS X"想使用系统钥匙串)
- 使用Struts2和jQuery EasyUI实现简单CRUD系统(六)——复选框进行多选删除操作
- "Mac OS X"想要进行更改。键入管理员的名称和密码以允许执行此操作("Mac OS X"想使用系统钥匙串)
- 使用系统API进行数据库操作