package com.gxx.manage.shiro.session; import java.io.Serializable; import java.util.Collection; import org.apache.shiro.session.Session; import com.gxx.manage.shiro.JedisManager; import com.gxx.manage.shiro.SerializeUtil; /** *
*
Title:
*
* Jedis实现shiro会话管理接口 *
*
Description:
*
*

none *

*
* * @author Administrator * @version 1.0, 2015年9月22日 * @since manage * */ public class JedisShiroSessionRepository implements ShiroSessionRepository { private static final String REDIS_SHIRO_SESSION = "shiro-session:"; private static final int SESSION_VAL_TIME_SPAN = 18000; private static final int DB_INDEX = 0; private JedisManager jedisManager; @Override public void saveSession(Session session) { if (session == null || session.getId() == null) throw new NullPointerException("session is empty"); try { byte[] key = SerializeUtil.serialize(buildRedisSessionKey(session.getId())); byte[] value = SerializeUtil.serialize(session); long sessionTimeOut = session.getTimeout() / 1000; Long expireTime = sessionTimeOut + SESSION_VAL_TIME_SPAN + (5 * 60); getJedisManager().saveValueByKey(DB_INDEX, key, value, expireTime.intValue()); } catch (Exception e) { e.printStackTrace(); } } @Override public void deleteSession(Serializable id) { if (id == null) { throw new NullPointerException("session id is empty"); } try { getJedisManager().deleteByKey(DB_INDEX, SerializeUtil.serialize(buildRedisSessionKey(id))); } catch (Exception e) { e.printStackTrace(); } } @Override public Session getSession(Serializable id) { if (id == null) throw new NullPointerException("session id is empty"); Session session = null; try { byte[] value = getJedisManager().getValueByKey(DB_INDEX, SerializeUtil .serialize(buildRedisSessionKey(id))); session = SerializeUtil.deserialize(value, Session.class); } catch (Exception e) { e.printStackTrace(); } return session; } @Override public Collection getAllSessions() { //TODO return null; } private String buildRedisSessionKey(Serializable sessionId) { return REDIS_SHIRO_SESSION + sessionId; } public JedisManager getJedisManager() { return jedisManager; } public void setJedisManager(JedisManager jedisManager) { this.jedisManager = jedisManager; } }