`

springrain技术详解(4)-shiro的缓存

 
阅读更多

因为是权限拦截校验,很多方法调用的频率是非常频繁的,为了更好的性能,shiro拥有一套完整的缓存体系,特别是针对web领域,做了部分增强.

先看下缓存在shiro的权限管理器中的配置:

01 <!-- 权限管理器 -->
02 <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
03 <!-- 数据库认证的实现 org.springrain.frame.shiro.ShiroDbRealm -->
04 <property name="realm" ref="shiroDbRealm" />
05 <!-- session 管理器 -->
06 <property name="sessionManager" ref="sessionManager" />
07 <!-- 缓存管理器 -->
08 <property name="cacheManager" ref="shiroCacheManager" />
09 </bean>
10 <bean id="shiroCacheManager"  class="org.apache.shiro.cache.MemoryConstrainedCacheManager"   />

cacheManager就是shiro的缓存管理器,springrain默认使用了shiro提供的MemoryConstrainedCacheManager,也可以实现相应的接口,实现自定义的cacheManager,例如springrain扩展的ShiroRedisCacheManager.
缓存的用途主要是两个.一:权限相关的授权,要是每次都从数据库查询,太不合理了.二:对session对象的缓存,实现分布式的session共享.
授权当然是有realm来做了,看下springrain中shiroDbRealm对缓存的支持.

1 public ShiroDbRealm() {
2 // 认证缓存
3 // super.setAuthenticationCacheName(GlobalStatic.authenticationCacheName);
4 super.setAuthenticationCachingEnabled(false);
5 // 授权缓存
6 super.setAuthorizationCacheName(GlobalStatic.authorizationCacheName);
7 }

认证是不想缓存的,登陆的时候查询一下数据库也没有什么,所以设置了 false,授权是要缓存的,也指定了缓存的名称,主要是为了刷新用户的权限缓存.
这样用户每次校验用户的访问权限,就不需要再查询数据库了.

对于缓存的刷新,shiro也提供了方法,接着上例说,管理员修改了一个角色的访问权限,这个时候需要对缓存刷新.

在 org.springrain.demo.service.impl.UserRoleMenuServiceImpl中进行了缓存手动刷新

1 public void updateRoleMenu(String roleId,String[] menus) throws Exception {
2 //刷新权限缓存
3 shiroCacheManager.getCache(GlobalStatic.authorizationCacheName).clear();
4 .......
5 }

以上就是对shiro cahce的简单使用, 下一篇说下shiro对httpsession的缓存处理.

本文出自 9iu.org,转载时请注明出处及相应链接。

本文永久链接: http://www.9iu.org/2013/12/15/springrain4-shiro-cache.html

0
分享到:
评论

相关推荐

    springrain-master.zip

    SpringRain-master.zip文件正是这样一个以云原生微服务为核心的应用实例,它结合了Kubernetes(K8S)的容器编排能力,以及apisix或istio的服务网格技术,旨在为开发者提供一套高效、稳定的Web开发框架。 首先,让...

    springrain

    7. 缓存:在SpringRain项目中可能还涉及到使用缓存技术来提高应用程序性能。在数据访问层,可以通过Spring的缓存抽象来缓存数据库查询结果,减少对数据库的直接访问次数,从而提升应用性能。 8. 工具类:在实际开发...

    Apache_Shiro_使用手册中文版

    在SpringRain项目中,Shiro被用于实现权限控制功能。 在Shiro框架中,有三个核心组件构成了其基本架构,它们分别是Subject、SecurityManager和Realm。 Subject代表了“当前操作用户”,它可以是人,也可以是第三方...

    springrain云原生微服务实现 v1.0.zip

    "springrain-master"文件夹中的源码提供了SpringRain的核心实现。通过分析源码,我们可以了解其如何处理服务注册、服务发现、熔断策略、配置中心等功能,这对于理解微服务架构和云原生实践非常有帮助。 7. **毕业...

    springrain云原生微服务实现

    【SpringRain云原生微服务实现】:SpringRain是一款基于Java平台的云原生微服务框架,它旨在帮助开发者高效地构建、部署和管理微服务应用。云原生是一种现代的软件开发方法,强调利用云计算的优势,如弹性伸缩、自动...

    springrain-servlet

    servlet servlet servlet servlet servlet

    基于K8S + apisix/istio 实现云原生微服务.springrain自带代码生成器,能够生成对表的增删改查的逻辑代码

    基于K8S + apisix/istio 实现云原生微服务.springrain自带代码生成器,能够生成对表的增删改查的逻辑代码.springrain是标准Maven项目,只依赖springboot,没有hibernate,struts,ibatis,数据库调优可以使用druid输出慢...

    JAVA初学者必看-Java编码规范.doc

    - **类命名**:类名应使用名词或名词性词组,每个单词的首字母大写,如`Person`,`SpringRain`。 - **方法命名**:方法名应使用动词或动词性词组,首字母小写,后续单词首字母大写,如`run()`,`display...

    Java编码规范学习

    例如,`class Person`,`class SpringRain`。 - **方法**:使用动词或动词性词组,首字母小写,第二个单词及以后的首字母大写。例如,`run()`,`displayInformation()`。 - **接口**:与类的命名规则相同,例如`...

    开关电源EXCEL辅助设计

    反激式开关电源EXCEL,方便计算大致参数等,并含有相应磁芯材料技术参数。

Global site tag (gtag.js) - Google Analytics