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:帳號已在其它地方登陸,請從新登陸。");
      }
   }
}
相關文章
相關標籤/搜索