|
|
@ -94,18 +94,8 @@ public class KickoutSessionFilter extends AccessControlFilter |
|
|
|
// 如果队列里的sessionId数超出最大会话数,开始踢人
|
|
|
|
// 如果队列里的sessionId数超出最大会话数,开始踢人
|
|
|
|
while (deque.size() > maxSession) |
|
|
|
while (deque.size() > maxSession) |
|
|
|
{ |
|
|
|
{ |
|
|
|
Serializable kickoutSessionId = null; |
|
|
|
|
|
|
|
// 是否踢出后来登录的,默认是false;即后者登录的用户踢出前者登录的用户;
|
|
|
|
// 是否踢出后来登录的,默认是false;即后者登录的用户踢出前者登录的用户;
|
|
|
|
if (kickoutAfter) |
|
|
|
Serializable kickoutSessionId = kickoutAfter ? deque.removeFirst() : deque.removeLast(); |
|
|
|
{ |
|
|
|
|
|
|
|
// 踢出后者
|
|
|
|
|
|
|
|
kickoutSessionId = deque.removeFirst(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
// 踢出前者
|
|
|
|
|
|
|
|
kickoutSessionId = deque.removeLast(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// 踢出后再更新下缓存队列
|
|
|
|
// 踢出后再更新下缓存队列
|
|
|
|
cache.put(loginName, deque); |
|
|
|
cache.put(loginName, deque); |
|
|
|
|
|
|
|
|
|
|
@ -126,7 +116,7 @@ public class KickoutSessionFilter extends AccessControlFilter |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 如果被踢出了,(前者或后者)直接退出,重定向到踢出后的地址
|
|
|
|
// 如果被踢出了,(前者或后者)直接退出,重定向到踢出后的地址
|
|
|
|
if ((Boolean) session.getAttribute("kickout") != null && (Boolean) session.getAttribute("kickout") == true) |
|
|
|
if (session.getAttribute("kickout") != null && (Boolean) session.getAttribute("kickout") == true) |
|
|
|
{ |
|
|
|
{ |
|
|
|
// 退出登录
|
|
|
|
// 退出登录
|
|
|
|
subject.logout(); |
|
|
|
subject.logout(); |
|
|
@ -183,4 +173,4 @@ public class KickoutSessionFilter extends AccessControlFilter |
|
|
|
// 必须和ehcache缓存配置中的缓存name一致
|
|
|
|
// 必须和ehcache缓存配置中的缓存name一致
|
|
|
|
this.cache = cacheManager.getCache(ShiroConstants.SYS_USERCACHE); |
|
|
|
this.cache = cacheManager.getCache(ShiroConstants.SYS_USERCACHE); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |