shiro集成redis实现session集群共享 发表于 2017-03-25 | 分类于 Java后台 | 好处 session在tomcat集群中共享(单点登录) tomcat重启后会话不丢失 实现覆写EnterpriseCacheSessionDAO 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071package com.kangyonggan.blog.web.shiro;import com.kangyonggan.api.common.service.RedisService;import org.apache.shiro.session.Session;import org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO;import org.springframework.beans.factory.annotation.Autowired;import java.io.Serializable;/** * @author kangyonggan * @since 2016/12/31 */public class MyEnterpriseCacheSessionDAO extends EnterpriseCacheSessionDAO { @Autowired private RedisService redisService; /** * 创建session,保存到redis数据库 * * @param session * @return */ @Override protected Serializable doCreate(Session session) { Serializable sessionId = super.doCreate(session); redisService.set(sessionId.toString(), session); return sessionId; } /** * 获取session * * @param sessionId * @return */ @Override protected Session doReadSession(Serializable sessionId) { // 先从缓存中获取session,如果没有再去数据库中获取 Session session = super.doReadSession(sessionId); if (session == null) { session = (Session) redisService.get(sessionId.toString()); } return session; } /** * 更新session的最后一次访问时间 * * @param session */ @Override protected void doUpdate(Session session) { super.doUpdate(session); redisService.set(session.getId().toString(), session); } /** * 删除session * * @param session */ @Override protected void doDelete(Session session) { super.doDelete(session); redisService.delete(session.getId().toString()); }} 但是一般还是别在集群中使用session。 打赏 支付宝