ehcache 刷新缓存_Shiro整合EhCache缓存(九)

戒色诗: 二八佳人体似酥,腰间仗剑斩凡夫。虽然不见人头落,暗里教君骨髓枯。

本章节是在上一章节的基础上进行优化的,所以一定要先读上一章节的内容。

一. 为什么要使用缓存?

在上一章节的时候,每次我们刷新页面,或者每次进行权限验证时,都需要进行查询该用户的所有的权限数据, 花费了大量的时间,查询相同的数据。所以,我们需要缓存。如果我们想查询的数据,在缓存里面,就直接从缓存里面拿 ,如果缓存中不存在想查询的数据,那么才从数据库中查询。 注意,当授权信息发生改变时,需要清理缓存,不然会一直使用原先的旧权限数据。

关于数据库缓存, 可以使用 redis ,也可以使用 ehcache,现在主流使用 redis 非关系型数据库。

与shiro 整合,我们建议还是使用原先的 ehcache 缓存。

二. Shiro 整合 EhCache 缓存

二.一  pom.xml 中添加依赖

net.sf.ehcacheehcache2.10.4

二.二  添加ehcache 配置文件 到根路径下

ehcache.xml

                maxElementsInMemory="10000"        eternal="false"        timeToIdleSeconds="120"        timeToLiveSeconds="120"        overflowToDisk="true"        />

二.三  在 applicationContext-shiro.xml 配置文件中配置缓存

二.三.一  配置缓存 EhCacheManager ,指定缓存文件

二.三.二  将 cacheManager 注入到 securityManager 里面

只需要这简单的三步,就可以了。MyRealm 代码不用任何改变。

二.四 测试 Ehcache 缓存

输入网址: http://localhost:8080/SSM_Shiro_Cache/User/toLogin

填写 admin ,密码 1234

fff78b3ce2a3bdba215ab9a543e6cf98.png

918e3fade382d5f326689e803aecdaf2.png

注意,查看控制台,最主要的是控制台信息。

55b7a096eef3d5f21981741d7bde2edf.png

发现,只打印了一条 获取权限 的输出语句, 不像以前那样,打印出5,六条数据。

多次刷新部门表,

2bd427727fef83ef947bb967e4e32037.png

发现,仍然没有二次查询。

输入网址: http://localhost:8080/SSM_Shiro_Cache/Dept/add,http://localhost:8080/SSM_Shiro_Cache/Dept/delete 利用注解权限验证, 发现,仍然只打印一条,依旧是从缓存中取出来的数据。b0f5345bd3bddf39dade5c705a81b241.png

Shiro 整合EhCache 缓存成功。

然而,如何去清理缓存呢?

三. Shiro 清理缓存

三.一  AuthorizingRealm

MyRealm 继承了 AuthorizingRealm 抽象类, 该 类 继承了 CachingRealm 类,

184a145a807a9521b8a97c82ded3d223.png可以在 MyRealm 中定义一个方法, 去调用 子类中的清理缓存的方法,来达到 清理缓存的目的。

三.二  MyRealm 中定义一个清理缓存的方法

/** * 清除缓存 */public void clearCache() {System.out.println("清除缓存数据");Subject subject=SecurityUtils.getSubject();// 调用子类去清理缓存super.clearCache(subject.getPrincipals());}

三.三 注入 MyRealm 对象, 调用clearCache 方法

由于 我们已经通过 Spring 来管理 MyRealm 对象了, 所以可以将 MyRealm 对象注入到我们创建的类里面。

当权限发生改变时,调用即可。

如,我们放置到 PrivilegeAction 中

@Autowiredprivate MyRealm myRealm;@RequestMapping("/clearCache")@ResponseBodypublic Map clearCache(){        Map map=new HashMap();        myRealm.clearCache();        map.put("response_status", true);        return map;}

当我们 通过 /Privilege/clearCache 访问时,就可以清理缓存了。

三.四 验证清理缓存

当输入 admin 登录之后, 多次刷新 dept页面,仍然使用的是缓存。

这个时候,我们输入网址: http://localhost:8080/SSM_Shiro_Cache/Privilege/clearCache

来进行清理缓存

08ec32de2f3e5404a594c47daf7ef527.png

abfac0b32f93ce5443cb0accf1a7e5fd.png

这个时候,我们再跳转到 主页, /Main/toMain

c6b9c286bc725e77eb560d37414b7b1f.png

会重新去获取一次缓存。

再次多次刷新 dept页面, 从缓存中取数据

404840a85c019606bb0a4081f1f4b9d3.png

清理缓存,是成功的。

本章节代码链接为:

链接:https://pan.baidu.com/s/1-t84HDcV8cCf59hBtd2AjA 提取码:dust

谢谢您的观看,我是两个蝴蝶飞, 如果喜欢,请关注我,再次感谢 !!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值