shiro 踢用户下线
import com.developtools.jasypt.myjaspyt.pojo.OAUser;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.session.Session;
import org.apache.shiro.session.mgt.DefaultSessionKey;
import org.apache.shiro.session.mgt.DefaultSessionManager;
import org.apache.shiro.session.mgt.SessionKey;
import org.apache.shiro.session.mgt.SessionManager;
import org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO;
import org.apache.shiro.session.mgt.eis.SessionDAO;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collection;
public class KickoutUtil {
private static final Logger logger = LoggerFactory.getLogger(KickoutUtil.class);
public static void kickout(String username) {
SecurityManager securityManager = SecurityUtils.getSecurityManager();
if (securityManager instanceof DefaultSecurityManager) {
DefaultSecurityManager defaultSecurityManager = (DefaultSecurityManager) securityManager;
SessionManager sessionManager = defaultSecurityManager.getSessionManager();
if (sessionManager instanceof DefaultSessionManager) {
DefaultSessionManager defaultSessionManager = (DefaultSessionManager) sessionManager;
SessionDAO sessionDAO = defaultSessionManager.getSessionDAO();
if (sessionDAO instanceof EnterpriseCacheSessionDAO) {
Collection<Session> activeSessions = sessionDAO.getActiveSessions();
if (!CollectionUtils.isEmpty(activeSessions)) {
for (Session session : activeSessions) {
OAUser oaUser = (OAUser) session.getAttribute("OA_USER_INFO");
if (null != oaUser && oaUser.getUserName().equals(username)) {
logger.info("用户 {} 被下线,session Id={}", username, session.getId());
SessionKey sessionKey = new DefaultSessionKey(session.getId());
defaultSessionManager.stop(sessionKey);
}
}
} else {
logger.warn("No active sessions found.");
}
} else {
logger.warn("The SessionDAO is not an instance of EnterpriseCacheSessionDAO.");
}
} else {
logger.warn("The SessionManager is not an instance of DefaultSessionManager.");
}
} else {
logger.warn("The SecurityManager is not an instance of DefaultSecurityManager.");
}
}
public static void logout() {
Subject subject = SecurityUtils.getSubject();
subject.logout();
}
}