Shiro提供SessionDAO用于会话的CRUD,即DAO(Data Access Object)模式实现:
- public interface SessionDAO {
-
-
-
-
- Serializable create(Session session);
-
-
- 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">
-
- <property name="activeSessionsCacheName" value="shiro-activeSessionCache"/>
-
- <property name="sessionIdGenerator" value="sessionIdGenerator"/>
- </bean>
缓存管理器,用于管理缓存的,此处使用Ehcache实现
-
- <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
-
- <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.youkuaiyun.com/zsg88/article/details/73825192