RedisSessionRepository.java 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package com.nuliji.tools.shiro.session;
  2. import java.io.Serializable;
  3. import java.util.Collection;
  4. import java.util.HashSet;
  5. import java.util.Set;
  6. import com.nuliji.tools.shiro.cache.RedisManager;
  7. import com.nuliji.tools.shiro.SerializeUtils;
  8. import org.apache.shiro.session.Session;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. /**
  12. * Created by gaojie on 2017/11/7.
  13. */
  14. public class RedisSessionRepository implements SessionRepository {
  15. private static Logger logger = LoggerFactory.getLogger(RedisSessionRepository.class);
  16. /**
  17. *
  18. * redis session key 前缀
  19. *
  20. * */
  21. private final String REDIS_SHIRO_SESSION = "shiro-session:";
  22. private RedisManager redisManager;
  23. @Override
  24. public void saveSession(Session session) {
  25. if (session == null || session.getId() == null) {
  26. logger.error("session or session ID is null");
  27. }
  28. byte[] key = getByteKey(session.getId());
  29. byte[] value = SerializeUtils.serialize(session);
  30. Long timeOut = session.getTimeout() / 1000;
  31. redisManager.set(key, value, timeOut.intValue());
  32. // logger.debug("save session {}:{}", new String(key), new String(value));
  33. logger.debug("save session expire:{}", new String(key), new String(value));
  34. }
  35. @Override
  36. public void deleteSession(Serializable sessionId) {
  37. if (sessionId == null) {
  38. logger.error("session id is null");
  39. return;
  40. }
  41. byte[] key = getByteKey(sessionId);
  42. redisManager.del(key);
  43. }
  44. @Override
  45. public Session getSession(Serializable sessionId) {
  46. if (null == sessionId) {
  47. logger.error("session id is null");
  48. return null;
  49. }
  50. Session session = null;
  51. byte[] key = getByteKey(sessionId);
  52. byte[] value = redisManager.get(key);
  53. if (null == value) {
  54. logger.debug("session is null");
  55. return null;
  56. }
  57. session = (Session) SerializeUtils.deserialize(value);
  58. // logger.debug("get session {}:{}", new String(key), new String(value));
  59. return session;
  60. }
  61. @Override
  62. public Collection<Session> getAllSessions() {
  63. Set<Session> sessions = new HashSet<Session>();
  64. Set<byte[]> byteKeys = redisManager
  65. .keys(this.REDIS_SHIRO_SESSION + "*");
  66. if (byteKeys != null && byteKeys.size() > 0) {
  67. for (byte[] bs : byteKeys) {
  68. Session s = (Session) SerializeUtils.deserialize(redisManager
  69. .get(bs));
  70. sessions.add(s);
  71. }
  72. }
  73. return sessions;
  74. }
  75. private byte[] getByteKey(Serializable sessionId) {
  76. String preKey = this.REDIS_SHIRO_SESSION + sessionId;
  77. return preKey.getBytes();
  78. }
  79. public void setRedisManager(RedisManager redisManager) {
  80. this.redisManager = redisManager;
  81. }
  82. }