shiro限制帐号只能在一处登录
只需要在subject.login(token);方法后加上这段代码
private void getLoginSession(Subject currentUser) {
//获取当前已登录的用户session列表
Collection<Session> list = ((DefaultSessionManager) ((DefaultSecurityManager) SecurityUtils.getSecurityManager()).getSessionManager()).getSessionDAO().getActiveSessions();
SysUserVo loginUser = (SysUserVo) currentUser.getPrincipal();
//遍历所有的session
for (Session session : list) {
Subject s = new Subject.Builder().session(session).buildSubject();
if (s.isAuthenticated()) {
SysUserVo user = (SysUserVo) s.getPrincipal();
//找到同一个账号
if (user.getId().equalsIgnoreCase(loginUser.getId())) {
//找到同一个账号的 不同的session
if (!session.getId().equals(currentUser.getSession().getId())) {
//对同一个账号的其他人 进行强制退出
Subject requestSubject = new Subject.Builder().sessionId(session.getId()).buildSubject();
requestSubject.logout();
}
}
}
}
}
版权声明:本文为weixin_42712370原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。