打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
springrain技术详解(5)

shiro通过扩展cacheManager实现自定义缓存,sessionDao可以把httpSession存储到cache中.shiro默认提供的EnterpriseCacheSessionDAO已经非常强大,EnterpriseCacheSessionDAO使用cacheManager,把httpSession存储到缓存中.

对于web项目,shiro通过门面模式已经复写了servlet的request,reponse和session,也就是说,web项目自己管理httpSession,和容器无关!这样我们就能很容易的实现分布式的session共享.

springrain使用了shiro的EnterpriseCacheSessionDAO,如果是单机情况,使用shiro自带的MemoryConstrainedCacheManager就足够了,如果是集群共享,就需要扩展实现cacheManager把httpSession存储到独立的缓存服务器,例如springrain使用了redis缓存服务器.

扩展sessionManager的同时,也需要扩展实现shiro的ICache接口,也就是具体的缓存实现.

例如springrain的扩展实现 ShiroRedisCacheManager  和 ShiroRedisCache.

基本原理就是web应用创建,修改,读取,销毁httpSession都是通过web应用的cacheManager实现,web容器(例如tomcat)不再处理httpSession相关操作.

在springrain中,redis相当于一个缓存数据库,多个web应用同时连接,这样实现httpSession共享,负载均衡.

场景案例:springrain部署到5个tomat实例,前端通过nginx配置集群负载,tomat1突然宕机,原来tomcat1的用户分配到tomcat2上,tomcat2根据sessionId从cacheManger中查询到了相应的httpSession,这样tomcat就可以直接处理业务,前台用户的操作不会造成影响.

下一篇我们说下怎么实现  一个账户只能登陆一次,也就是踢掉上一个登陆

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
跟我学Shiro目录贴
我的shiro之旅: 九 shiro 清理缓存的权限信息
Shiro会话管理
Servlet、Filter和Listener
同一个tomcat不同项目的session共享问题
JSP和Struts正确解决用户退出问题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服