Shiro同一个账号不允许登陆两次

步骤如下:

1、获取所有在线用户的Session信息。

2、获取当前登陆人的sessionId。

3、设置与当前登录账号相同,但sessionId不同的session信息超时。

代码如下:

if (!Global.TRUE.equals(Global.getConfig("user.multiAccountLogin"))){
   Collection<Session> sessions = getSystemService().getSessionDao().getActiveSessions();
   if (sessions.size() > 0){
      // 如果是登录进来的,则踢出已在线用户
      if (UserUtils.getSubject().isAuthenticated()){
         for (Session session : sessions){
            String loginName = String.valueOf(session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY));
            String sessionId = principal.getSessionid();
            //同一个账号不允许登陆两次
            if(principal.id.equals(loginName) && !sessionId.equals(session.getId())){
               session.setTimeout(0);
            }
         }
      }
      // 记住我进来的,并且当前用户已登录,则退出当前用户提示信息。
      else{
         UserUtils.getSubject().logout();
         throw new AuthenticationException("msg:账号已在其它地方登录,请重新登录。");
      }
   }
}

 

 

转载于:https://my.oschina.net/u/561367/blog/1538780

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值