Example usage for org.apache.shiro.session.mgt SimpleSession getLastAccessTime

List of usage examples for org.apache.shiro.session.mgt SimpleSession getLastAccessTime

Introduction

In this page you can find the example usage for org.apache.shiro.session.mgt SimpleSession getLastAccessTime.

Prototype

public Date getLastAccessTime() 

Source Link

Usage

From source file:com.funtl.framework.apache.shiro.session.JedisSessionDAO.java

License:Apache License

/**
 * ??/*  w w w.j  a v a2  s.  c  o  m*/
 *
 * @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;
}

From source file:com.leshazlewood.samples.shiro.cassandra.CassandraSessionDAO.java

License:Apache License

protected void save(SimpleSession ss) {

    //Cassandra TTL values are in seconds, so we need to convert from Shiro's millis:
    int timeoutInSeconds = (int) (ss.getTimeout() / 1000);

    PreparedStatement ps = prepareSaveStatement();
    BoundStatement bs = new BoundStatement(ps);

    byte[] serialized = serializer.serialize(ss);

    ByteBuffer bytes = ByteBuffer.wrap(serialized);

    bs.bind(timeoutInSeconds, ss.getStartTimestamp(),
            ss.getStopTimestamp() != null ? ss.getStartTimestamp() : null, ss.getLastAccessTime(),
            ss.getTimeout(), ss.isExpired(), ss.getHost(), bytes, ss.getId());

    cassandraSession.execute(bs);//ww w  . j a  v a  2s . co m
}

From source file:com.wms.studio.controller.admin.UserAdminManagerController.java

License:Apache License

@RequestMapping("admin/userManager/userOnlineStore")
public void getOnlineUsers(Model model) {
    Iterator<Session> sessions = sessionDao.getActiveSessions().iterator();
    ArrayList<OnlineUser> ous = new ArrayList<OnlineUser>();
    while (sessions.hasNext()) {
        OnlineUser ou = new OnlineUser();
        SimpleSession session = (SimpleSession) sessions.next();
        ou.setHost(session.getHost());//from w  w w  . jav a 2  s  .  co m
        ou.setId(session.getId().toString());
        ou.setLastAccessTime(session.getLastAccessTime());
        ou.setStartTime(session.getStartTimestamp());
        PrincipalCollection principal = (PrincipalCollection) session
                .getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY);
        if (principal != null) {
            ShiroUser su = (ShiroUser) principal.getPrimaryPrincipal();
            ou.setUserid(su.loginName);
            ou.setUsername(su.name);
            ou.setLogin(true);
        }
        ous.add(ou);
    }
    model.addAttribute("users", ous);
    model.addAttribute("total", ous.size());
}