Shiro缓存整合EhCache

shiro的缓存是被shiro的缓存管理器所管理的,即CacheManage,Shiro的用户认证是没有提供缓冲机制的,因为每次登陆一次查询一次数据库比对一下用户名密码,做缓存的必要几乎是没有的。

但是shiro的授权将会是大量的数据,shiro的授权缓存是默认开启的,接下来我们将对shiro的缓冲使用EhCache来管理,之后授权时只有用户第一次访问系统的时候会走realm查数据库,之后就会走缓冲。

注意:用户正常退出或者非正常退出时都会清空缓冲。

<!-- 缓存管理器 -->
<bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
    <property name="cacheManagerConfigFile" value="classpath:shiro-ehcache.xml" />
</bean>

<!-- 继承自AuthorizingRealm的自定义Realm,即指定Shiro验证用户登录的类为自定义的UserRealm.java -->
<bean id="adminRealm" class="com.platform.shiro.AdminRealm" />

<!-- Shiro默认会使用Servlet容器的Session,可通过sessionMode属性来指定使用Shiro原生Session -->
<!-- 即<property name="sessionMode" value="native"/>,详细说明见官方文档 -->
<!-- 这里主要是设置自定义的单Realm应用,若有多个Realm,可使用'realms'属性代替 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
    <property name="realm" ref="adminRealm" />
    <property name="cacheManager" ref="cacheManager" />
</bean>

adminRealm是你自己实现的授权类

shiro-ehcache.xml:

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://ehcache.xsd">

    <!--diskStore:缓存数据持久化的目录 地址 -->
    <diskStore path="E:\copyrightPlatformehCache" />

    <defaultCache maxElementsInMemory="1000"
        maxElementsOnDisk="10000000" eternal="false" overflowToDisk="false"
        diskPersistent="false" timeToIdleSeconds="120" timeToLiveSeconds="120"
        diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU">
    </defaultCache>

</ehcache>

diskStore path 也可以定义为: java.io.tmpdir

缓冲清空:
当用户权限修改后,用户再次登陆shiro会自动调用realm从数据库获取权限数据,如果在修改权限后想立即清除缓存则可以调用realm的clearCache方法清除缓存。
realm中定义clearCached方法:

// 清除缓存
public void clearCached() {
    PrincipalCollection principals = SecurityUtils.getSubject()
            .getPrincipals();
    super.clearCache(principals);
}

在权限修改后调用realm中的方法,realm已经由spring管理,所以从spring中获取realm实例,调用clearCached方法。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 构建一个互联网应用,权限校验管理是很重要的安全措施,这其中主要包含: 认证 - 用户身份识别,即登录 授权 - 访...
    zhuke阅读 3,578评论 0 30
  • 一、架构 要学习如何使用Shiro必须先从它的架构谈起,作为一款安全框架Shiro的设计相当精妙。Shiro的应用...
    ITsupuerlady阅读 3,570评论 4 32
  • Apache Shiro Apache Shiro 是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权...
    罗志贇阅读 3,282评论 1 49
  • 1.WAV文件格式分析 仿真中读出的wav文件信息如下Fs=4.41kHz,nBits = 16 bit/samp...
    nino天阅读 1,758评论 0 1
  • 每一顿精致的早餐,都可以唤起一个仪式感的一天。 最近有个词语很流行,仪式感。锅碗瓢盆的生活久了,总会觉得无聊,如何...
    DreamySnow阅读 7,660评论 0 6