Shiro同一个帐号不容许登录两次

步骤以下:session

一、获取全部在线用户的Session信息。ip

二、获取当前登录人的sessionId。ci

三、设置与当前登陆帐号相同,但sessionId不一样的session信息超时。get

代码以下:io

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:帐号已在其它地方登陆,请从新登陆。");
      }
   }
}
相关文章
相关标签/搜索