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分别代表创建/修改/删除/读取会话。




  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值