shiro的回话存储/持久化SessionDao
Shiro提供SessionDAO用于会话的CRUD,即DAO(Data Access Object)模式实现:
- public interface SessionDAO {
- /*如DefaultSessionManager在创建完session后会调用该方法;
- 如保存到关系数据库/文件系统/NoSQL数据库;即可以实现会话的持久化;
- 返回会话ID;主要此处返回的ID.equals(session.getId());
- */
- Serializable create(Session session);
- //根据会话ID获取会话
- Session readSession(Serializable sessionId) throws UnknownSessionException;
- //更新会话;如更新会话最后访问时间/停止会话/设置超时时间/设置移除属性等会调用
- void update(Session session) throws UnknownSessionException;
- //删除会话;当会话过期/会话停止(如用户退出时)会调用
- void delete(Session session);
- //获取当前所有活跃用户,如果用户量多此方法影响性能
- Collection<Session> getActiveSessions();
- }
Shiro的SessionDAO实现
AbstractSessionDAO提供了SessionDAO的基础实现,如生成会话ID等;
CachingSessionDAO提供了对开发者透明的会话缓存的功能,只需要设置相应的CacheManager即可;
MemorySessionDAO直接在内存中进行会话维护;
EnterpriseCacheSessionDAO提供了缓存功能的会话维护,默认情况下使用MapCache实现,内部使用ConcurrentHashMap保存缓存的会话。
可以通过如下配置设置SessionDAO
- <bean id="sessionDAO" class="org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO">
- <!--设置Session缓存名字,默认就是shiro-activeSessionCache-->
- <property name="activeSessionsCacheName" value="shiro-activeSessionCache"/>
- <!-- 用于生成会话ID,默认就是JavaUuidSessionIdGenerator,使用java.util.UUID生成 -->
- <property name="sessionIdGenerator" value="sessionIdGenerator"/>
- </bean>
缓存管理器,用于管理缓存的,此处使用Ehcache实现
- <!-- 缓存管理器 -->
- <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
- <!-- 设置ehcache缓存的配置文件 -->
- <property name="cacheManagerConfigFile" value="classpath:cache/shiro-ehcache.xml"/>
- </bean>
配置ehcache.xml,Cache的名字为shiro-activeSessionCache,即设置的sessionDAO的activeSessionsCacheName属性值。
- <cache name="shiro-activeSessionCache"
- maxEntriesLocalHeap="10000"
- overflowToDisk="false"
- eternal="false"
- diskPersistent="false"
- timeToLiveSeconds="0"
- timeToIdleSeconds="0"
- statistics="true"/>
配置设置会话ID生成器,
- <bean id="sessionIdGenerator" class="org.apache.shiro.session.mgt.eis.JavaUuidSessionIdGenerator "/>
如果自定义实现SessionDAO,继承CachingSessionDAO即可,doCreate/doUpdate/doDelete/doReadSession分别代表创建/修改/删除/读取会话。
http://blog.csdn.net/zsg88/article/details/73825192