`

shiro ---缓存配置

阅读更多

 shiro 对缓存的管理:

   存放缓存是一个ConcurrentMap<String, Cache> caches;caches是一个线程安全的ConcurrentMap类型,在这里,至少存放两个Cache,一个是用来存放session的,一个是用来存放权限(Authorization)的,shiro先从caches里拿,如果拿不到相应的Cache,就调用createCache创建一个,createCache是抽象方法,由子类实现。创建完之后,放到Map中。

shiro创建两个Cache放到ConcurrentMap中,一个name中ShiroCasRealm.authorizationCache(这个名字的命名规则是自定义的realm的名字加".authorizationCache"),这个是shiro启动的时候创建的,用来保存认证信息,一个叫shiro-activeSessionCache(如果session配置成shiro管理并利用缓存),这个是第一次创建session的时候创建的,用来保存session。当用户登录的时候,将会把用户的权限信息保存到name为ShiroCasRealm.authorizationCache的Cache中,以后需要再使用权限信息,直接从Cache中拿而不需要再从数据库中查询。这样也有一个问题,就是当用户权限改变时,就需要用户重新登录把权限信息从新load到Cache中。不过既然我们知道Cache的名字,我们就可以拿到这个Cache,然后把用户的权限信息删除,让shiro在授权时找不到权限而shiro自己从新去load,甚至我们可以删除了,然后再从新load到Cache中

 

 

配置缓存管理器:

<bean id="shiroEhcacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">  
        <!--classpath是缓存属性的配置文件  -->  
        <property name="cacheManagerConfigFile" value="classpath:config/ehcache-shiro.xml" />  
</bean>

 

 

自定义的Ream,给ShiroRealm指定cacheManager(不指定启动shiro会报提示

 

):

<bean id="shiroRealm" class="com.xxx.ShiroRealm" >    
    <property name="authorizationCacheName" value="shiro-authorizationCache"/>
        <property name="cacheManager" ref="shiroEhcacheManager"/>
</bean>

 

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
     <property name="realm" ref="shiroRealm"></property> 
          <!--注入缓存管理器  -->
     <property name="cacheManager" ref="shiroEhcacheManager"></property>
</bean>

 

  • 缓存属性配置文件:
<ehcache updateCheck="false" name="shiroCache">
    <defaultCache
              <!--最大缓存数量  -->
            maxElementsInMemory="10000"
            eternal="true"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="true"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            clearOnFlush="false"
            />
</ehcache>

 

 

name:缓存名称。
maxElementsInMemory:缓存最大个数。
eternal:对象是否永久有效,一但设置了,timeout将不起作用。
timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大
timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大
overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区
maxElementsOnDisk:硬盘最大缓存个数。
diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。
clearOnFlush:内存数量最大时是否清除。
Shiro提供了默认的EHCache的配置xml,如果你要配置自己的EHCache.xml,需要注意以下几点:

1:overflowToDisk=“true” - 这确保当你溢出进程内存时,会话不丢失且能够被序列化到磁盘上。

2: eternal=“true” - 确保缓存项(Session 实例)永不过期或被缓存自动清除。这是很有必要的,因为Shiro 基于计划过程完成自己的验证。如果我们关掉这项,缓存将会在Shiro 不知道的情况下清扫这些Sessions,这可能引起麻烦。

3:如果你想使用一个不同的名字而不是默认的,你可以在EnterpriseCacheSessionDAO 上配置名字,例如:sessionDAO.activeSessionsCacheName = myname

  只要确保在ehcahe.xml 中有一项与这个名字匹配
 
分享到:
评论

相关推荐

    SpringMVC-Mybatis-Shiro-redis

    基于SpringMVC、Mybatis、Redis、Freemarker的Shiro管理Demo源码的升级版 相关详细配置说明请参看 --&gt; http://www.sojson.com/shiro

    47-二级缓存 Hibernate-Shiro-MyBatis

    在工作中无处不在的二级缓存,Hibernate -- Shiro -- MyBatis 这三个框架都有二级缓存的技术,总结出详细的配置文档。详解了每步的配置!

    shiro-ehcache.xml

    在maven项目中,此shiro-ehcache.xml配置文件放在resources下,在applicationContext.xml中,用于shiro缓存管理器所配置,然后给shiro安全管理器配置此缓存管理器

    SpringMVC-Mybatis-Shiro-redis-master 权限集成缓存中实例

    在配置文件里(spring-shiro.xml )中的配置有所修改。 &lt;!-- 会话Cookie模板 --&gt; &lt;bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie"&gt; &lt;!--cookie的name,我故意取名叫...

    SpringShiro分布式缓存版

    这个Demo体现shiro的地方主要在两个类以及shiro.xml的配置文件 CustomRealm : 处理了登录验证以及授权.. ShiroAction : 用来传递登录时的用户数据..转换为token传递给realm...之后根据结果做相应的逻辑处理.. shiro....

    shiro-zookeeper:Apache Zookeeper 的 shiro 缓存管理器

    白动物园管理员Apache Zookeeper 的 Apache Shiro 会话缓存,它将允许您的应用程序在 Zookeeper FS 中保存您的用户会话。在您的应用程序中构建和使用建造简单运行./gradlew build ,完成后,将 jar 从lib复制到您的 ...

    shiro-test-dan:使用Shiro的简单测试项目

    Shiro配置为使用Ehcache进行缓存。 skunkworks-包含尝试在Shiro会话中存储各种对象的尝试。 master-除了可以存储到磁盘或内存中的SessionDAO实现之外,还包含自定义Cache和CacheManager实现。 设置 要部署到本地...

    Ehcache缓存框架整合Spring和shiro权限配置

    缓存可以提高查询数据性能, 对同一批数据进行多次查询时, 第一次查询走数据库, 查询数据后,将数据保存在内存中,第二次以后查询 可以直接从内存获取数据,而不需要 和数据库进行交互。

    基于Spring+SpringMVC+Mybatis+Shiro的商城分布式系统架构源码.zip

    my-shop基于Spring+SpringMVC+Mybatis+ Shiro分布式敏捷开发系统架构,提供整套公共微服务服务模块:内容管理、支付中心、用户管理(包括第三方)、微信平台、存储系统、配置中心、日志分析、任务和通知等,支持服务...

    吴天雄--shiro个人总结笔记.doc

    shiro标签,第六讲 自定义Realm(加入整合spring和MyBatis), 第七讲 加密(加密算法、加密过程、加密实现代码),第八讲 记住我,第九讲 缓存管理(代码实现),第十讲 会话管理(session的监听和检测、环境配置)...

    尚硅谷Shiro视频教程

    · 00.尚硅谷_Shiro_源码、课件 · 01.尚硅谷_Shiro_简介 · 02.尚硅谷_Shiro_HelloWorld · 03....尚硅谷_Shiro_缓存 · 26.尚硅谷_Shiro_认证和记住我的区别 · 27.尚硅谷_Shiro_实现Rememberme

    spring+shiro+ehcache例子

    在web.xml中配置shiro过滤器 4:项目post乱码处理 在web.xml中配置字符过滤器 5:项目运行信息查看 在web.xml中配置log4j信息打印 (需要自己将log4j的配置文件给打开) 三: 配置文件 查看/src/config/ ...

    Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统

    Oracle关系型数据库以及非关系型数据库(Redis),Oracle 性能调优(PL/SQL语言,SQL查询优化,存储过程等),用Redis做中间缓存,缓存数据 实现异步处理,定时任务,整合Quartz Job以及Spring Task 邮件管理功能...

    ssm+shiro+redis+ecache整合认证权限

    ssm+shiro+redis+ecache整合认证权限,里面有配置了两套缓存,redis,和ecache,由于redis缓存频繁读取session,现在改成了本地缓存,ecache,速度有所提升,如果用于生产环境建议改成redis,替换成redis,值需要替换...

    spring-boot mybaits shiro redis整合

    shiro权限管理。 aop日志记录。 4、调度 ====== Spring task, 可以查询已经注册的任务。立即执行一次任务。 5、缓存和Session =========== 注解redis缓存数据,Spring-session和redis实现分布式session同步...

    springboot整合shiro,redis缓存session

    为实现Web应用的分布式集群部署,要解决登录session的统一。本文利用shiro做权限控制,redis做session存储,结合spring boot快速配置实现session共享。

    Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统.rar

    shiro作为安全框架,主流技术 几乎零XML,极简配置 两套UI实现(bootstrap+layer ui),可以自由切换 报表后端采用技术: SpringBoot整合SSM(Spring+Mybatis-plus+ SpringMvc),spring security 全注解式的权限管理和...

    基于SpringBoot+Layui+shiro安全框架和Ehcache缓存框架搭建的学生管理系统源码+项目说明.zip

    1、基于SpringBoot+Layui+shiro安全框架和Ehcache缓存框架搭建的学生管理系统源码+项目说明.zip 2、该资源包括项目的全部源码,下载可以直接使用! 3、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末...

    Shiro 视频教程+源码+课件

    内容涵盖 Shiro 认证、加密、授权、安全标签、安全注解、会话管理、缓存、Rememberme 等 JavaEE 企业级开发的核心技术。视频讲授过程中通过分析源代码使学员知其然更知其所以然。 【课程内容】 第一章 问候 Shiro ...

    springmvc+shiro+spring+hibernate+redis缓存管理示例

    完整的spring +springmvc+hibernate+shiro项目实例,详细的shiro配置介绍,通过redis管理用户session缓存。。。。。。。。

Global site tag (gtag.js) - Google Analytics