步骤如下:
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:账号已在其它地方登录,请重新登录。"); } } }