All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.paranora.ssoc.shiro.session.BasicRedisSessionDAO Maven / Gradle / Ivy

package org.paranora.ssoc.shiro.session;

import org.apache.shiro.session.Session;
import org.apache.shiro.session.UnknownSessionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.RedisTemplate;

import java.io.Serializable;
import java.util.Collection;
import java.util.concurrent.TimeUnit;

/**
 * The type Basic redis session dao.
 */
public class BasicRedisSessionDAO implements BasicSessionDAO {

    private static final String REDIS_SHIRO_SESSION_KEY_PREFIX_DEFAULT = "PARANORA-REDIS-SESSION:";
    private static final int REDIS_SESSION_VAL_TIME_SPAN_DEFAULT = 1800000;

    private Logger logger = LoggerFactory.getLogger(this.getClass());

    private int sessionTimeout = REDIS_SESSION_VAL_TIME_SPAN_DEFAULT;
    private String sessionKeyPrefix = REDIS_SHIRO_SESSION_KEY_PREFIX_DEFAULT;
    private RedisTemplate redisTemplate;

    /**
     * Gets session key prefix.
     *
     * @return the session key prefix
     */
    public String getSessionKeyPrefix() {
        return sessionKeyPrefix;
    }

    /**
     * Sets session key prefix.
     *
     * @param sessionKeyPrefix the session key prefix
     */
    public void setSessionKeyPrefix(String sessionKeyPrefix) {
        this.sessionKeyPrefix = sessionKeyPrefix;
    }

    /**
     * Gets redis template.
     *
     * @return the redis template
     */
    public RedisTemplate getRedisTemplate() {
        return redisTemplate;
    }

    /**
     * Sets redis template.
     *
     * @param redisTemplate the redis template
     */
    public void setRedisTemplate(RedisTemplate redisTemplate) {
        this.redisTemplate = redisTemplate;
    }

    /**
     * Gets session timeout.
     *
     * @return the session timeout
     */
    public int getSessionTimeout() {
        return sessionTimeout;
    }

    /**
     * Sets session timeout.
     *
     * @param sessionTimeout the session timeout
     */
    public void setSessionTimeout(int sessionTimeout) {
        this.sessionTimeout = sessionTimeout;
    }


    public void refresh(Serializable sessionId) {
        getRedisTemplate().expire(prepareSessionKey(sessionId), sessionTimeout, TimeUnit.MILLISECONDS);
        logger.debug("refresh session id: {}, timeout: {}", sessionId, sessionTimeout);
    }

    @Override
    public Serializable create(Session session) {
        if (session == null || session.getId() == null)
            throw new NullPointerException("session is empty");
        try {
            getRedisTemplate().opsForValue().set(prepareSessionKey(session.getId()), session, sessionTimeout, TimeUnit.MILLISECONDS);
            logger.debug("create session id: {}, timeout: {}", session.getId(), sessionTimeout);
            return session.getId();
        } catch (Exception e) {
            logger.error("create Session Error", e);
        }
        return null;
    }

    @Override
    public Session readSession(Serializable sessionId) throws UnknownSessionException {
        if (sessionId == null) {
            throw new NullPointerException("session id is empty");
        }
        Session session = null;
        try {
            session = getRedisTemplate().boundValueOps(prepareSessionKey(sessionId)).get();
            logger.debug("get session id: {}", sessionId);
        } catch (Exception e) {
            logger.error("get Session Error", e);
        }
        return session;
    }

    @Override
    public void update(Session session) throws UnknownSessionException {
        if (session == null || session.getId() == null)
            throw new NullPointerException("session is empty");
        try {
            getRedisTemplate().boundValueOps(prepareSessionKey(session.getId())).set(session, sessionTimeout, TimeUnit.MILLISECONDS);
            logger.debug("update session id: {}, timeout: {}", session.getId(), sessionTimeout);

        } catch (Exception e) {
            logger.error("update Session Error", e);
        }
    }

    @Override
    public void delete(Session session) {
        if (null==session || null==session.getId()) {
            throw new NullPointerException("session id is empty");
        }
        try {
            Serializable sessionId=session.getId();
            getRedisTemplate().delete(prepareSessionKey(sessionId));
            logger.debug("delete session id: {}, timeout: {}", sessionId, sessionTimeout);

        } catch (Exception e) {
            logger.error("delete Session Error", e);
        }
    }

    @Override
    public Collection getActiveSessions() {
        logger.debug("get all sessions");
        return null;
    }

    /**
     * Prepare session key string.
     *
     * @param sessionId the session id
     * @return the string
     */
    protected String prepareSessionKey(Serializable sessionId) {
        return sessionKeyPrefix + sessionId;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy