我是通过一个定时任务定期获取有关shiro的session信息。
1、导入下面的包
import org.apache.shiro.session.mgt.eis.SessionDAO;
@Autowired
SessionDAO sessiondao;
2、定时执行获取session信息,排查出问题多亏日志里打印的时间差值
@Scheduled(fixedRate = 1000 * 10)//每过10秒钟
private void getsessionvalue(){
Collection<Session> activeSessions = sessiondao.getActiveSessions();
log.info("----allsession----"+activeSessions);
for (Session session : activeSessions) {
log.info("---sessionid----"+session.getId()+"----timeout---"+session.getTimeout()+"----lasttime---"+session.getLastAccessTime());
long time1 = session.getLastAccessTime().getTime();
log.info("----LastAccessTime----"+time1);
long time2 = new Date().getTime();
log.info("----currentTime----"+time2);
long timeout = session.getTimeout();
log.info("----差值----"+(time2 -time1));
if ((time2 - time1) > timeout) {
log.info("----true----");
activeSessions.remove(session);
}
}
}