Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >shiro教程8(缓存管理)

shiro教程8(缓存管理)

作者头像
用户4919348
发布于 2019-04-02 03:41:42
发布于 2019-04-02 03:41:42
1.3K00
代码可运行
举报
文章被收录于专栏:波波烤鸭波波烤鸭
运行总次数:0
代码可运行

缓存

为什么要使用缓存

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

使用Ehcache来实现缓存

引入jar包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
	<groupId>org.apache.shiro</groupId>
	<artifactId>shiro-spring</artifactId>
	<version>1.2.3</version>
</dependency>
<dependency>
	<groupId>org.apache.shiro</groupId>
	<artifactId>shiro-ehcache</artifactId>
	<version>1.2.3</version>
</dependency>
<dependency>
	<groupId>net.sf.ehcache</groupId>
	<artifactId>ehcache-core</artifactId>
	<version>2.5.0</version>
</dependency>

添加ehcache的配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
	<!--diskStore:缓存数据持久化的目录 地址  -->
	<diskStore path="C:\tools\ehcache" />
	<!--   
	eternal:缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。  
	maxElementsInMemory:缓存中允许创建的最大对象数  
	overflowToDisk:内存不足时,是否启用磁盘缓存。  
	timeToIdleSeconds:缓存数据的钝化时间,也就是在一个元素消亡之前,  两次访问时间的最大时间间隔值,这只能在元素不是永久驻留时有效,如果该值是 0 就意味着元素可以停顿无穷长的时间。  
	timeToLiveSeconds:缓存数据的生存时间,也就是一个元素从构建到消亡的最大时间间隔值,这只能在元素不是永久驻留时有效,如果该值是0就意味着元素可以停顿无穷长的时间。  
	memoryStoreEvictionPolicy:缓存满了之后的淘汰算法。  
	diskPersistent:设定在虚拟机重启时是否进行磁盘存储,默认为false
	diskExpiryThreadIntervalSeconds: 属性可以设置该线程执行的间隔时间(默认是120秒,不能太小
	1 FIFO,先进先出  
	2 LFU,最少被使用,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。  
	3 LRU,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。  
	--> 
	<defaultCache 
		maxElementsInMemory="1000" 
		maxElementsOnDisk="10000000"
		eternal="false" 
		overflowToDisk="false" 
		diskPersistent="false"
		timeToIdleSeconds="120"
		timeToLiveSeconds="120" 
		diskExpiryThreadIntervalSeconds="120"
		memoryStoreEvictionPolicy="LRU">
	</defaultCache>
</ehcache>

在shiro的配置文件中配置缓存

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 	<!-- 配置缓存管理器 -->
 	<bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
 		<!-- 关联配置文件 -->
 		<property name="cacheManagerConfigFile" value="classpath:shiro-ehcache.xml"/>
 	</bean>
 	
 	<!-- 注册SecurityManager -->
 	<bean class="org.apache.shiro.web.mgt.DefaultWebSecurityManager" id="securityManager">
 		<!-- 配置自定义Realm -->
 		<property name="realm" ref="myRealm"/>
 		<property name="cacheManager" ref="cacheManager"/>
 	</bean>

测试

shiro授权的源码分析

看HasRole方法

清空缓存

在自定义realm中添加清空方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 清空缓存
 */
public void clearCache(){
	PrincipalCollection principals = SecurityUtils.getSubject().getPrincipals();
	super.clearCache(principals);
}

添加业务处理方法

测试

  第一次正常请求会授权,之后访问从缓存中获取。当调用清空缓存方法后,再次请求的时候因为缓存已经空了,所以会再次授权, 场景: 权限修改生效后,立即刷新清空缓存,则可以实现用户不退出生效新的权限

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年01月26日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java学习笔记-全栈-web开发-23-Shiro框架
Shiro 提供了与 Web 集成的支持,其通过一个ShiroFilter 入口来拦截需要安全控制的URL,然后进行相应的控制
devi
2021/08/18
7530
Mybatis缓存相关的知识
小节:一级缓存默认是开启的,只在一次SqlSession中有效,也就是拿到连接到关闭连接这个区间段!
乐心湖
2020/07/31
5950
Mybatis缓存相关的知识
SpringBoot中Shiro缓存使用Redis、Ehcache
SpringBoot 中配置redis作为session 缓存器。 让shiro引用
云扬四海
2019/08/19
2.8K0
ehcache.xml参数配置说明
ehcache.xml参数配置说明: <?xml version="1.0" encoding="UTF-8"?> <ehcache updateCheck="false" name="default
小柒2012
2018/04/13
8130
另一种缓存,Spring Boot 整合 Ehcache
用惯了 Redis ,很多人已经忘记了还有另一个缓存方案 Ehcache ,是的,在 Redis 一统江湖的时代,Ehcache 渐渐有点没落了,不过,我们还是有必要了解下 Ehcache ,在有的场景下,我们还是会用到 Ehcache。
江南一点雨
2019/06/18
5580
一.使用Ehcache
本文最后更新于 878 天前,其中的信息可能已经有所发展或是发生改变。 1. pom <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache</artifactId> <version>2.8.9</version> </dependency> 2. 创建 Ehcache 的配置文件 路径src/main/resources/hcahe.xml <ehcache xmlns:xsi="http://www.
Yuyy
2022/06/28
4950
一.使用Ehcache
Shiro缓存整合EhCache
但是shiro的授权将会是大量的数据,shiro的授权缓存是默认开启的,接下来我们将对shiro的缓冲使用EhCache来管理,之后授权时只有用户第一次访问系统的时候会走realm查数据库,之后就会走缓冲。
試毅-思伟
2018/09/06
1.8K0
ssm整合shiro详解
这里有详细的ssm整合shiro步骤,需要先搭建ssm框架,教程在 https://blog.csdn.net/qq_41150890/article/details/108419455
全栈程序员站长
2022/06/27
3760
ssm整合shiro详解
shiro的Cache机制
Shiro开发团队明白在许多应用程序中性能是至关重要的。Caching 是Shiro 中的一个重要功能,以确保安全操作保持尽可能的快。
用户5640963
2019/07/28
1.1K0
Ehcache介绍及整合Spring实现高速缓存
Ehcache介绍 EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。它使用的是JVM的堆内存,超过内存可以设置缓存到磁盘,企业版的可以使用JVM堆外的物理内存。 Spring整合Ehcache 首先加入最新的ehcache的maven依赖 <!-- ehcache --> <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>
Java技术栈
2018/03/30
1.6K0
Ehcache介绍及整合Spring实现高速缓存
shiro权限控制(一):shiro介绍以及整合SSM框架
  shiro安全框架是目前为止作为登录注册最常用的框架,因为它十分的强大简单,提供了认证、授权、加密和会话管理等功能 。  shiro能做什么? 认证:验证用户的身份 授权:对用户执行访问控制:判断用户是否被允许做某事 会话管理:在任何环境下使用 Session API,即使没有 Web 或EJB 容器。 加密:以更简洁易用的方式使用加密功能,保护或隐藏数据防止被偷窥 Realms:聚集一个或多个用户安全数据的数据源 单点登录(SSO)功能。        为没有关联到登录的用户
生活创客
2018/01/30
1.2K0
shiro权限控制(一):shiro介绍以及整合SSM框架
缓存
一级缓存失效情况:没有使用到当前的一级缓存,效果就是,还需要再向数据库中发起一次查询请求!
后端码匠
2021/08/19
3580
缓存
安全框架Shiro入门
李家酒馆酒保
2017/12/27
1.2K0
安全框架Shiro入门
ehcache的配置使用
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
逝兮诚
2019/10/30
8810
shiro整合ehcache AND SessionManager
1 Ehcache 缓存 <!-- 5 配置缓存管理器 --> <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhC
用户5927264
2019/07/31
8780
浅谈 MyBatis 缓存
MyBatis 默认开启了一级缓存,一级缓存是在 SqlSession 层面进行缓存的。即,同一个 SqlSession ,多次调用同一个 Mapper 和同一个方法的同一个参数,只会进行一次数据库查询,然后把数据缓存到缓冲中,以后直接先从缓存中取出数据,不会直接去查数据库。但是不同的 SqlSession 对象,因为不用的 SqlSession 都是相互隔离的,所以相同的 Mapper、参数和方法,它还是会再次发送到 SQL 到数据库去执行,返回结果。
全栈程序员站长
2022/08/31
3090
Mybatis的缓存
1 Mybatis的缓存: 2 Mybatis的一级缓存 : 3 Mybatis的二级缓存 二级缓存的参数配置 mybatis整合ehcache ehcache.xml文件: <ehcache
用户5927264
2019/07/31
5110
shiro笔记(八)springboot 整合shiro框架,使用这个ehcache缓冲技术
EHCache是sourceforge的开源缓存项目,现已经具有独立官网,网址:(http://www.ehcache.org)。其本身是纯JAVA实现的,所以可以和绝大多数Java项目无缝整合,例如:Hibernate的缓存就是基于EHCache实现的。
一写代码就开心
2021/08/10
6430
Spring整合Ehcache管理缓存
静默虚空
2018/01/05
1.8K0
mybatis二级缓存的作用范围_java缓存机制
应用场景: 对于访问多的查询请求且用户对查询结果实时性要求不高,此时可采用mybatis二级缓存技术降低数据库访问量,提高访问速度,业务场景比如:耗时较高的统计分析sql、电话账单查询sql等。 实现方法如下:通过设置刷新间隔时间,由mybatis每隔一段时间自动清空缓存,根据数据变化频率设置缓存刷新间隔flushInterval,比如设置为30分钟、60分钟、24小时等,根据需求而定。
全栈程序员站长
2022/11/05
7040
相关推荐
Java学习笔记-全栈-web开发-23-Shiro框架
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档