package com.bootdo.system.service.impl; import com.bootdo.system.domain.UserDO; import com.bootdo.system.domain.UserOnline; import com.bootdo.system.domain.UserToken; import com.bootdo.system.service.SessionService; import org.apache.shiro.session.Session; import org.apache.shiro.session.mgt.eis.SessionDAO; import org.apache.shiro.subject.SimplePrincipalCollection; import org.apache.shiro.subject.support.DefaultSubjectContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.security.Principal; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * 待完善 * * @author bootdo */ @Service public class SessionServiceImpl implements SessionService { private final SessionDAO sessionDAO; @Autowired public SessionServiceImpl(SessionDAO sessionDAO) { this.sessionDAO = sessionDAO; } @Override public List list() { List list = new ArrayList<>(); Collection sessions = sessionDAO.getActiveSessions(); for (Session session : sessions) { UserOnline userOnline = new UserOnline(); if (session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY) == null) { continue; } else { SimplePrincipalCollection principalCollection = (SimplePrincipalCollection) session .getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY); UserDO userDO = (UserDO) principalCollection.getPrimaryPrincipal(); userOnline.setUsername(userDO.getUsername()); } userOnline.setId((String) session.getId()); userOnline.setHost(session.getHost()); userOnline.setStartTimestamp(session.getStartTimestamp()); userOnline.setLastAccessTime(session.getLastAccessTime()); userOnline.setTimeout(session.getTimeout() / (1000L * 60L)); list.add(userOnline); } return list; } @Override public List listOnlineUser() { List list = new ArrayList<>(); UserDO userDO; Collection sessions = sessionDAO.getActiveSessions(); for (Session session : sessions) { SimplePrincipalCollection principalCollection = new SimplePrincipalCollection(); if (session.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY) == null) { continue; } else { principalCollection = (SimplePrincipalCollection) session .getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY); userDO = (UserDO) principalCollection.getPrimaryPrincipal(); list.add(userDO); } } return list; } @Override public Collection sessionList() { return sessionDAO.getActiveSessions(); } @Override public boolean forceLogout(String sessionId) { Session session = sessionDAO.readSession(sessionId); session.setTimeout(0); return true; } }