List of usage examples for org.apache.shiro.session.mgt SimpleSession validate
public void validate() throws InvalidSessionException
From source file:com.funtl.framework.apache.shiro.session.JedisSessionDAO.java
License:Apache License
/** * ??/* w w w .j av a 2 s . c om*/ * * @param includeLeave ??3? * @param principal ??? * @param filterSession ???? * @return */ @Override public Collection<Session> getActiveSessions(boolean includeLeave, Object principal, Session filterSession) { Set<Session> sessions = Sets.newHashSet(); Jedis jedis = null; try { jedis = JedisUtils.getResource(); Map<String, String> map = jedis.hgetAll(sessionKeyPrefix); for (Map.Entry<String, String> e : map.entrySet()) { if (StringUtils.isNotBlank(e.getKey()) && StringUtils.isNotBlank(e.getValue())) { String[] ss = StringUtils.split(e.getValue(), "|"); if (ss != null && ss.length == 3) {// jedis.exists(sessionKeyPrefix + e.getKey())){ // Session session = (Session)JedisUtils.toObject(jedis.get(JedisUtils.getBytesKey(sessionKeyPrefix + e.getKey()))); SimpleSession session = new SimpleSession(); session.setId(e.getKey()); session.setAttribute("principalId", ss[0]); session.setTimeout(Long.valueOf(ss[1])); session.setLastAccessTime(new Date(Long.valueOf(ss[2]))); try { // ?SESSION session.validate(); boolean isActiveSession = false; // ????3? if (includeLeave || DateUtils.pastMinutes(session.getLastAccessTime()) <= 3) { isActiveSession = true; } // ?? if (principal != null) { PrincipalCollection pc = (PrincipalCollection) session .getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY); if (principal.toString().equals( pc != null ? pc.getPrimaryPrincipal().toString() : StringUtils.EMPTY)) { isActiveSession = true; } } // SESSION if (filterSession != null && filterSession.getId().equals(session.getId())) { isActiveSession = false; } if (isActiveSession) { sessions.add(session); } } // SESSION? catch (Exception e2) { jedis.hdel(sessionKeyPrefix, e.getKey()); } } // SESSION?? else { jedis.hdel(sessionKeyPrefix, e.getKey()); } } // SESSIONValue else if (StringUtils.isNotBlank(e.getKey())) { jedis.hdel(sessionKeyPrefix, e.getKey()); } } logger.info("getActiveSessions size: {} ", sessions.size()); } catch (Exception e) { logger.error("getActiveSessions", e); } finally { JedisUtils.returnResource(jedis); } return sessions; }