spring boot爬坑之旅途--redis-MySessionDao配置(结合redis实现session共享)(11)

package com.zm.blog.config.shiro;

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

import javax.annotation.Resource;

import org.apache.shiro.session.Session;
import org.apache.shiro.session.UnknownSessionException;
import org.apache.shiro.session.mgt.ValidatingSession;
import org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;

import com.zm.blog.utils.shiroUtil.SerializableUtils;

public class MySessionDao extends EnterpriseCacheSessionDAO {

	
	int sessiontimeout=1800000;
	

	@Autowired
	private StringRedisTemplate stringRedisTemplate;

	@Resource(name = "redisTemplate")
	ValueOperations<Object, Object> valOps;

	@Override
	protected Serializable doCreate(Session session) {
		Serializable sessionId = generateSessionId(session);
		System.out.println("MySessionDao.doCreate();" + sessionId);
		assignSessionId(session, sessionId);
		valOps.set(sessionId, SerializableUtils.serialize(session), sessiontimeout, TimeUnit.MILLISECONDS);
		return session.getId();
	}

	@Override
	protected Session doReadSession(Serializable sessionId) {
		System.out.println("MySessionDao.doReadSession();" + sessionId);
		if (valOps.get(sessionId) == null) {
			throw new UnknownSessionException("There is no session with id [" + sessionId + "]");
		}
		return SerializableUtils.deserialize(valOps.get(sessionId).toString());
	}

	@Override
	protected void doUpdate(Session session) {
		System.out.println("MySessionDao.doUpdate();" + session.getId());
		if (session instanceof ValidatingSession && !((ValidatingSession) session).isValid()) {
			return;
		}
		valOps.set(session.getId(), SerializableUtils.serialize(session), sessiontimeout, TimeUnit.MILLISECONDS);
	}

	@Override
	protected void doDelete(Session session) {
		System.out.println("MySessionDao.doDelete();");
		stringRedisTemplate.delete(session.getId().toString());
	}
}

猜你喜欢

转载自blog.csdn.net/z3133464733/article/details/80215283