//package com.project.shiro.util.redis;
//
//import cn.wisenergy.service.common.utils.ByteUtil;
//import cn.wisenergy.service.common.utils.redis.RedisClient;
//import cn.wisenergy.service.common.utils.redis.RedisConsts;
//import org.apache.shiro.session.Session;
//import org.apache.shiro.session.UnknownSessionException;
//import org.apache.shiro.session.mgt.eis.AbstractSessionDAO;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import javax.annotation.Resource;
//import java.io.IOException;
//import java.io.Serializable;
//import java.util.Collection;
//import java.util.HashSet;
//import java.util.Set;
//
//public class ShiroRedisSessionDAO extends AbstractSessionDAO {
//
//    private static Logger logger = LoggerFactory.getLogger(ShiroRedisSessionDAO.class);
//
//    //注入redisClient实例
//    @Resource(name = "redisClient")
//    private RedisClient redisClient;
//
//    /**
//     * shiro-redis的session对象前缀
//     */
//
//    private String keyPrefix = RedisConsts.ADMIN_SHIRO_SESSION_KEY;
//
//    @Override
//    public void update(Session session) throws UnknownSessionException {
//        this.saveSession(session);
//    }
//
//    private void saveSession(Session session) throws UnknownSessionException {
//        if (session == null || session.getId() == null) {
//            logger.error("session or session id is null");
//            return;
//        }
//        this.redisClient.setAndExpire(this.getPreStringKey(session.getId()), session, RedisConsts.ADMIN_SHIRO_SESSION_EXPIRE);
//    }
//
//    @Override
//    public void delete(Session session) {
//        if (session == null || session.getId() == null) {
//            logger.error("session or session id is null");
//            return;
//        }
//        redisClient.del(getPreStringKey(session.getId()));
//
//    }
//
//    @Override
//    public Collection<Session> getActiveSessions() {
//        Set<Session> sessions = new HashSet<Session>();
//
//        Set<byte[]> keys = null;
//        try {
//            keys = redisClient.keys(ByteUtil.objectToBytes(this.keyPrefix + "*"));
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        if (keys != null && keys.size() > 0) {
//            for (byte[] key : keys) {
//                Session s = null;
//                try {
//                    s = (Session) ByteUtil.bytesToObject(redisClient.get(key));
//                } catch (IOException e) {
//                    e.printStackTrace();
//                } catch (ClassNotFoundException e) {
//                    e.printStackTrace();
//                }
//                sessions.add(s);
//            }
//        }
//
//        return sessions;
//    }
//
//    @Override
//    protected Serializable doCreate(Session session) {
//        Serializable sessionId = this.generateSessionId(session);
//        this.assignSessionId(session, sessionId);
//        this.saveSession(session);
//        return sessionId;
//    }
//
//    @Override
//    protected Session doReadSession(Serializable sessionId) {
//        if (sessionId == null) {
//            logger.error("session id is null");
//            return null;
//        }
//
//        Session s = (Session) redisClient.get(this.getPreStringKey(sessionId));
//        return s;
//    }
//
//    /**
//     * 获得String类型的key
//     *
//     * @param
//     * @return
//     */
//    private String getPreStringKey(Serializable sessionId) {
//        String preKey = this.keyPrefix + sessionId;
//        return preKey;
//    }
//
//    public String getKeyPrefix() {
//        return keyPrefix;
//    }
//
//    public void setKeyPrefix(String keyPrefix) {
//        this.keyPrefix = keyPrefix;
//    }
//
//    public void setRedisClient(RedisClient redisClient) {
//        this.redisClient = redisClient;
//    }
//
//    public RedisClient getRedisClient() {
//        return redisClient;
//    }
//
//}
