Java 多用户登录限制的实现方法

本文介绍了两种Java实现多用户登录限制的方法,重点讲解了使用内置作用域application存储登录信息,结合Session监听器实现用户登录状态管理。这种方法避免了频繁数据库操作,提高了性能和可用性。详细阐述了登录验证、登录状态维护、Session销毁时的处理以及如何处理用户意外关闭浏览器的情况。此外,还提及了在线用户管理模块的构建,允许管理员强制退出其他用户。
摘要由CSDN通过智能技术生成

Java 多用户登录限制的实现方法 现在有两种解决方案: 1、将用户的登录信息用一个标志位的字段保存起来,每次登录成功就标记1,注销登录就标记为0,当标记为1的时候不允许别人登录。 2、将用户的登录信息保存在application内置作用域内, 然后利用session监听器监听每一个登录用户的登录情况。 很显然,第一种方式 每次登录 都需要操作数据库,多了一些不必要的性能开销,而且在登录状态下 万一突然电脑关闭了,那就永远都不能登录了,可用性比较低。 但是第二种方式就不一样了,可操作性强,很方便维护所有在线用户的信息。 接下来 主要介绍第二种方式的具体实现: 1、在处理登录的login方法中,先查询数据库验证下该用户是否存在,如果存在 判断该登录账户是否已经锁定了, 然后从application内置作用域对象中取出所有的登录信息,查看该username账户是否已经登录,如果登录了,就友好提示下,反之表示可以登录,将该登录信息以键值对的方式保存在application中。 代码如下:

//没有使用零配置前 每个访问的方法都要加上@Action ,否则404 @Action(value="login", results={ @Result(name="index", location="index.jsp"), }) public String login() throws Exception { try{ User result = userService.login(user.getFuUserName(), user.getFuPassword()); if(result!=null){ if(result.getFuStatus()!=null && result.getFuStatus()==0){ super.setRequestAttr(Constant.MESSAGE, "抱歉,该用户已被锁定!"); return "error"; } Map<String, String> loginUserMap = (Map<String, String>) super.getApplicationAttr(Constant.LOGIN_USER_MAP); boolean isExist = false; String sessionId = super.getSessionId(false); if(loginUserMap==null){ loginUserMap = new HashMap<String, String>(); } for (String username : loginUserMap.keySet()) { //判断是否已经保存该登录用户的信息 或者 如果是同一个用户进行重复登录那么允许登录 if(!username.equals(result.getFuUserName()) || loginUserMap.containsValue(sessionId)){ continue; } isExist = true; break; } if(isExist){ super.setRequestAttr(Constant.MESSAGE, "抱歉,该用户已登录!"); return "error"; }else { loginUserMap.put(result.getFuUserName(), sessionId); } //登录成功 super.setSessionAttr(Constant.LOGIN_USER, result); super.setApplicatio

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值