禁止多人使用同一账号在系统上进行操作[踢人操作]

 在开发中遇到一个问题,系统内,同一个账号可以在不同的地方多个人同时进行登陆,操作。

   要求是同一账号在系统内必须保持唯一,即,若是有人用同一账号登陆了,已登录账号失效
   
   解决方案有两种:
    一种是在系统中设置状态位,登陆签到,退出签退...至于异常退出,在旧的session销毁之前是无法再次进行登陆的,配置session的监听,在session销毁时,进行数据库操作,更改库里对应用户的状态位
    另一种思想:在服务器上维护一个map,以用户唯一标识为主键,值为session,登录时判断该用户是否已在,不在的话加入,已在的话将原session销毁,放入现有的session,这样的话前面登陆的人就不能再进行操作了。

下面实现后者,前者的话也是一样的


   实现:
使用java.util.concurrent.ConcurrentHashMap

ConcurrentHashMap 是 Doug Lea 的 util.concurrent 包的一部分,它提供比Hashtable 或者 synchronizedMap 更高程度的并发性。而且,对于大多数成功的 get() 操作它会设法避免完全锁定,其结果就是使得并发应用程序有着非常好的吞吐量。


[java]  view plain copy print ?
  1. public class SessionHandler {  
  2. private static final  ConcurrentHashMap<String, HttpSession> sessionMap = new                                                                    ConcurrentHashMap<String, HttpSession>();  
  3. //登陆时调用  
  4.   public static synchronized void kickUser(String userId,HttpSession session){  
  5. HttpSession oldSession = sessionMap.get(userId);  
  6. if(oldSession != null){  
  7. if(!oldSession.getId().equals(session.getId())){  
  8. try{  
  9. oldSession .invalidate();  
  10. }catch(Exception ex){}  
  11. sessionMap.put(userId, session);  
  12. return ;  
  13. }  
  14. }  
  15. sessionMap.put(userId, session);  
  16. }  
  17. //正常退出时调用  
  18. public static void removeUserFromSessionMap(String userId){  
  19. if(sessionMap.containsKey(userId))  
  20. sessionMap.remove(userId);  
  21. }  
  22.   
  23.   
  24. }  


至于异常的退出,只能等到会话超时了
此时必须设置监听会话超时时session销毁时附带进行的操作
[java]  view plain copy print ?
  1. public class SessionListener implements HttpSessionListener {  
  2. public void sessionDestroyed(HttpSessionEvent sessionEvent){  
  3.       HttpSession session = sessionEvent.getSession() ;  
  4.       SessionManager.removeUserFromSessionMap((String) session.getAttribute("userId"));  
  5.   
  6.   
  7. }  
  8. }  


web.xml中配置
[xhtml]  view plain copy print ?
  1. <listener>  
  2. <listener-class>  
  3. listener.SessionListener   
  4. </listener-class>  
  5. </listener>  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
网络安全操作规范全文共3页,当前为第1页。网络安全操作规范全文共3页,当前为第1页。一、账号管理 网络安全操作规范全文共3页,当前为第1页。 网络安全操作规范全文共3页,当前为第1页。 1.1账号的设置必须遵循"唯一性、必要性、最小授权"的原则。 唯一性原则是指每个账号对应一个用户,不允许多人共同拥有同一账号。 必要性原则是指账号的建立和分配应根据工作的必要性进行分配,不能根据个人需要、职位进行分配,禁止与所管理主机系统无关的人员系统上拥有用户账号,要根据工作变动及时关闭不需要的系统账号。 最小授权原则是指对账号的权限应进行严格限制,其权限不能大于其工作、业务需要。超出正常权限范围的,要经主管领导审批。 1.2系统中所有的用户(包括超级权限用户和普通用户)必须登记备案,并定期审阅。 1.3严禁用户将自己所拥有的用户账号转借他人使用。 1.4员工发生工作变动,必须重新审核其账号的必要性和权限,及时取消非必要的账号和调整账号权限;如员工离开本部门,须立即取消其账号。 1.5在本部门每个应用系统、网络工程验收后,应立即删除系统中所有的测试账号和临时账号,对需要保留的账号口令重新进行设置。 1.6系统管理员必须定期对系统上的账号使用情况进行审核,发现可疑用户账号时及时核实并作相应的处理,对长期不用的用户账号进行锁定。 1.7 一般情况下不允许外部人员直接进入主机系统进行操作。在特殊情况下(如系统维修、升级等)外部人员需要进入系统操作,必须网络安全操作规范全文共3页,当前为第2页。网络安全操作规范全文共3页,当前为第2页。由系统管理员进行登录,并对操作过程进行记录备案。禁止系统用户及口令直接交给外部人员。 网络安全操作规范全文共3页,当前为第2页。 网络安全操作规范全文共3页,当前为第2页。 二、 口令管理 2.1口令的选取、组成、长度、修改周期应符合安全规定。禁止使用名字、姓氏、电话号码、生日等容易猜测的字符串作为口令,也不要使用单个单词作为口令,在口令组成上必须包含大小写字母、数字、标点等不同的字符组合,口令长度要求在8位以上。 2.2重要的主机系统,要求至少每个月修改口令,对于管理用的工作站和个人计算机,要求至少每两个月修改口令。 2.3重要的主机系统应逐步采用一次性口令及其它可靠的身份认证技术。 2.4本地保存的用户口令应加密存放,防止用户口令泄密。 三、软件管理: 3.1不安装和使用来历不明、没有版权的软件。 3.2不得在重要的主机系统上安装测试版的软件。 3.3开发、修改应用系统时,要充分考虑系统安全和数据安全,从数据的采集、传输、处理、存贮,访问控制等方面进行论证,测试、验收时也必须进行相应的安全性能测试、验收。 3.4操作系统和应用软件应根据其本身存在的安全漏洞及时进行必须的安全设置、升级和打安全补丁。 3.5个人计算机上不得安装与工作无关的软件。在服务器系统禁止安装与服务器所提供服务和应用无关的其它软件。 网络安全操作规范全文共3页,当前为第3页。网络安全操作规范全文共3页,当前为第3页。3.6系统设备和应用软件的登录提示应对可能的攻击尝试、非授权访问提出警告。 网络安全操作规范全文共3页,当前为第3页。 网络安全操作规范全文共3页,当前为第3页。 3.7主机系统的服务器、工作站所使用操作系统必须进行登记。登记记录上应该标明厂家、操作系统版本、已安装的补丁程序号、安装和升级的时间等内容,并进行存档保存。 3.8重要的主机系统系统启用、重新安装或者升级时应建立系统镜像,在发生网络安全问题时利用系统镜像对系统进行完整性检查。 四、服务器、网络设备、计算机安全系统(如防火墙、入侵检测系统等)等应具备日志功能并必须启用。网络信息安全管理员要定期分析网络安全系统操作系统日志,在发现系统遭受攻击或者攻击尝试时采取安全措施进行保护,对网络攻击或者攻击尝试进行定位、跟踪并发出警告,并向网络信息安全领导小组报告。系统日志必须保存三个月以上。 五、新建计算机网络、应用系统必须同时进行网络信息安全的设计。 .....................最新资料整理推荐..................... 网络安全操作规范 1 .....................最新资料整理推荐.....................
多人合作中,使用Git来提交代码是一个非常常见的做法。首先,每位开发人员需要克隆远程仓库到本地,并创建自己的分支用于开发新功能或修复bug。当开发人员完成自己的工作后,需要将代码提交到本地仓库,并将修改推送到远程仓库。以下是一个常见的Git多人合作代码提交的流程: 1. 首先,每个开发人员需要从远程仓库克隆代码到本地: ``` git clone <远程仓库地址> ``` 2. 在本地仓库中创建自己的分支,并切换到该分支: ``` git checkout -b <分支名称> ``` 3. 在该分支上进行开发工作,并定期提交自己的代码: ``` git add . git commit -m '描述本次提交的内容' ``` 4. 当开发人员完成自己的工作后,需要将修改推送到远程仓库: ``` git push origin <分支名称> ``` 5. 当其他开发人员也完成了自己的工作并将代码推送到远程仓库后,可以使用以下命令将远程仓库中的最新代码合并到本地仓库: ``` git pull origin <分支名称> ``` 请注意,如果在合并过程中出现冲突,需要解决冲突后再次提交代码。 以上是一个基本的Git多人合作代码提交的流程。每个开发人员都可以在自己的分支上进行开发,并将代码提交到远程仓库,以便其他开发人员可以获取并合并最新的代码。这样可以有效地协作开发,并保持代码的版本控制和一致性。<span class="em">1</span><span class="em">2</span><span class="em">3</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值