我的编程空间,编程开发者的网络收藏夹
学习永远不晚

shiro框架04会话管理+缓存管理+Ehcache使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

shiro框架04会话管理+缓存管理+Ehcache使用

目录

一、会话管理

1.基础组件

1.1 SessionManager

1.2 SessionListener

1.3 SessionDao

1.4 会话验证

1.5 案例

二、缓存管理

1、为什么要使用缓存

2、什么是ehcache

3、ehcache特点

4、ehcache入门

5、shiro与ehcache整合

1)导入相关依赖(注意:这里使用shiro的1.4.1版本)

2)实现spring与ehcache缓存(创建spring-ehcache.xml)

3)在SecurityManager安全管理器中设置缓存管理器

4)开启Shiro的授权或者认证数据缓存


一、会话管理

Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如Tomcat、WebLogic),不管是J2SE还是J2EE环境都可以使用,提供了会话管理,会话事件监听,会话存储/持久化,容器无关的集群,失效/过期支持,对Web的透明支持,SSO单点登录的支持等特性。

所谓会话,即用户访问应用时保持的连接关系,在多次交互中应用能够识别出当前访问的用户是谁,且可以在多次交互中保存一些数据。如访问一些网站时登录成功后,网站可以记住用户,且在退出之前都可以识别当前用户是谁。

1.基础组件

1.1 SessionManager

会话管理器管理着应用中所有 Subject 的会话的创建、维护、删除、失效、验证等工作。是Shiro 的核心组件,顶层组件SecurityManager直接继承了SessionManager,且提供了SessionsSecurityManager实现直接把会话管理委托给相应的SessionManager

  1)DefaultSessionManager:使用的默认实现,用于JavaSE环境
  2)ServletContainerSessionManager:使用的默认实现,用于Web环境,其直接使用Servlet容器的会话
  3)DefaultWebSessionManager:用于Web环境的实现,可以替代ServletContainerSessionManager,自己维护着会话,直接废弃了Servlet容器的会话管理

1.2 SessionListener

SessionListener会话监听器用于监听会话创建、过期及停止事件。
  实现方式:
  1)实现SessionListener,必须实现所有方法
  2)继承SessionListenerAdapter,重写指定方法

相关API:
  1)onStart(Session session):监听会话创建事件
  2)onStop(Session session):监听会话销毁事件
  3)onExpiration(Session session):监听会话过期事件

 

1.3 SessionDao

 Shiro提供SessionDAO用于会话的CRUD,即DAO(Data Access Object)模式实现。

1)AbstractSessionDAO:提供了SessionDAO的基础实现,如生成会话ID等
  2)CachingSessionDAO:提供了对开发者透明的会话缓存的功能,需要设置相应的CacheManager 
  3)MemorySessionDAO:直接在内存中进行会话维护(默认方式)
  4)EnterpriseCacheSessionDAO:提供了缓存功能的会话维护,默认情况下使用MapCache实现,内部使用ConcurrentHashMap保存缓存的会话。

 

 

  //如DefaultSessionManager在创建完session后会调用该方法;  //如保存到关系数据库/文件系统/NoSQL数据库;redis  //即可以实现会话的持久化;返回会话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 getActiveSessions();

1.4 会话验证

1)Shiro提供了会话验证调度器,用于定期的验证会话是否已过期,如果过期将停止会话。
  2)出于性能考虑,一般情况下都是获取会话的同时来验证会话是否过期并停止会话的;但是如果在Web环境中,如果用户不主动退出是不知道会话是否过期的,因此需要定义的检测会话是否过期,Shiro提供了会话验证调度器来定期检查会话是否过期,SessionValidationScheduler 。
  3)Shrio也提供了使用Quartz会话验证调度器 QuartzSessionValidationScheduler 。

1.5 案例

        
          
  
                                        
                                                                                                                                                      

二、缓存管理

1、为什么要使用缓存

在没有使用缓存的情况下,我们每次发送请求都会调用一次doGetAuthorizationInfo方法来进行用户的授权操作,但是我们知道,一个用户具有的权限一般不会频繁的修改,也就是每次授权的内容都是一样的,所以我们希望在用户登录成功的第一次授权成功后将用户的权限保存在缓存中,下一次请求授权的话就直接从缓存中获取,这样效率会更高一些。

2、什么是ehcache

Ehcache是现在最流行的纯Java开源缓存框架,配置简单、结构清晰、功能强大。是Hibernate中默认CacheProvider。Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。

注1:本章介绍的是2.X版本,3.x的版本和2.x的版本API差异比较大

3、ehcache特点

1) 够快
      Ehcache的发行有一段时长了,经过几年的努力和不计其数的性能测试,Ehcache终被设计于large, high concurrency systems.
  2) 够简单
      开发者提供的接口非常简单明了,从Ehcache的搭建到运用运行仅仅需要的是你宝贵的几分钟。其实很多开发者都不知道自己用在用Ehcache,Ehcache被广泛的运用于其他的开源项目
  3) 够袖珍
      关于这点的特性,官方给了一个很可爱的名字small foot print ,一般Ehcache的发布版本不会到2M,V 2.2.3 才 668KB。
  4) 够轻量
      核心程序仅仅依赖slf4j这一个包,没有之一!
  5) 好扩展
      Ehcache提供了对大数据的内存和硬盘的存储,最近版本允许多实例、保存对象高灵活性、提供LRU、LFU、FIFO淘汰算法,基础属性支持热配置、支持的插件多
  6) 监听器
      缓存管理器监听器 (CacheManagerListener)和 缓存监听器(CacheEvenListener),做一些统计或数据一致性广播挺好用的
  7) 分布式缓存
      从Ehcache 1.2开始,支持高性能的分布式缓存,兼具灵活性和扩展性

4、ehcache入门

1)导入相关依赖 

     net.sf.ehcache     ehcache     2.10.0  

2)核心接口

  CacheManager:缓存管理器
  Cache:缓存对象,缓存管理器内可以放置若干cache,存放数据的实质,所有cache都实现了Ehcache接口
  Element:单条缓存数据的组成单位

CacheManager -> Cache(可定义各种缓存策略) -> Element

3)核心配置文件

                                                                        

5、shiro与ehcache整合

1)导入相关依赖(注意:这里使用shiro的1.4.1版本)

:之前是使用的1.3.1版本,在安全退出的时候引发了UnknownSessionException: There is no session with id错误,通过升级shiro版本后问题解决!!!o(╥﹏╥)o 一下午时间啊!!!

      org.apache.shiro      shiro-ehcache      1.4.1  
                    org.springframework            spring-context-support            ${spring.version}        

2)实现spring与ehcache缓存(创建spring-ehcache.xml)

                            

3)在SecurityManager安全管理器中设置缓存管理器

    

4)开启Shiro的授权或者认证数据缓存

在自定义Realm配置中开启并设置授权或者认证数据缓存

          

 注:这里只开启了授权缓存,避免每次请求都要重新查询授权数据!!!

以上就是有关会话管理的分享,关于Shiro到这也就完结了,我会发出项目包,也就是我学习Shiro所写的那个项目。感谢大家观赏!

来源地址:https://blog.csdn.net/m0_62246061/article/details/127817593

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

shiro框架04会话管理+缓存管理+Ehcache使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

PHP框架中的用户会话管理:安全、高效、定制化

php框架通过加密会话id、https传输和会话超时确保会话安全性。通过会话缓存、压缩和按需存储优化会话效率。框架提供定制化选项,包括会话存储驱动、会话配置和会话数据管理。PHP框架中的用户会话管理:安全、高效、定制化在Web应用程序中,
PHP框架中的用户会话管理:安全、高效、定制化
2024-05-23

Linux中使用全局框架怎么实现内存管理

Linux中使用全局框架怎么实现内存管理,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一. 地址划分。1. CPU地址。CPU地址是指CPU的地址总线能寻址的
2023-06-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录