springboot中使用缓存shiro-ehcache
在pom.xml中注入缓存依赖,版本(Sep 09, 2016)
spring-context-support
包含支持UI模版(Velocity,FreeMarker,JasperReports),
邮件服务,
脚本服务(JRuby),
缓存Cache(EHCache),
任务计划Scheduling(uartz)。
<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-ehcache</artifactId><version>1.3.2</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.3.7.RELEASE</version>
</dependency>
在ShiroConfiguration中注入缓存
/*** shiro缓存管理器;* 需要注入对应的其它的实体类中:* 1、安全管理器:securityManager* 可见securityManager是整个shiro的核心;* @return*/@Beanpublic EhCacheManager ehCacheManager(){System.out.println("ShiroConfiguration.getEhCacheManager()");EhCacheManager cacheManager = new EhCacheManager();cacheManager.setCacheManagerConfigFile("classpath:config/ehcache-shiro.xml");return cacheManager;}
将缓存对象注入到SecurityManager中:
@Beanpublic SecurityManager securityManager(){DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();securityManager.setRealm(myShiroRealm());securityManager.setCacheManager(ehCacheManager());return securityManager;}
添加缓存配置文件:
在src/main/resouces/config添加ehcache-shiro.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache name="es"><diskStore path="java.io.tmpdir"/><!--name:缓存名称。maxElementsInMemory:缓存最大数目maxElementsOnDisk:硬盘最大缓存个数。eternal:对象是否永久有效,一但设置了,timeout将不起作用。overflowToDisk:是否保存到磁盘,当系统当机时timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。diskPersistent:是否缓存虚拟机重启期数据 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。clearOnFlush:内存数量最大时是否清除。memoryStoreEvictionPolicy:Ehcache的三种清空策略;FIFO,first in first out,这个是大家最熟的,先进先出。LFU, Less Frequently Used,就是上面例子中使用的策略,直白一点就是讲一直以来最少被使用的。如上面所讲,缓存的元素有一个hit属性,hit值最小的将会被清出缓存。LRU,Least Recently Used,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。--><defaultCachemaxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"overflowToDisk="false"diskPersistent="false"diskExpiryThreadIntervalSeconds="120"/><!-- 登录记录缓存锁定10分钟 --><cache name="passwordRetryCache"maxEntriesLocalHeap="2000"eternal="false"timeToIdleSeconds="3600"timeToLiveSeconds="0"overflowToDisk="false"statistics="true"></cache></ehcache>
在配置文件上已经有很详细的解释了,所以这里就过多介绍ehcache的配置了。
运行程序访问:http://127.0.0.1:8080/userInfo/userAdd
查看控制台的打印信息:
权限配置-->MyShiroRealm.doGetAuthorizationInfo()
这个信息就只打印一次了,说明我们的缓存生效了。
文章主要参考于作者林祥纤的博客
http://412887952-qq-com.iteye.com/blog/2299780
springboot中使用缓存shiro-ehcache相关推荐
- Springboot中的缓存Cache和CacheManager原理介绍
一.背景理解 什么是缓存,为什么要用缓存? 程序运行中,在内存保持一定时间不变的数据就是缓存.简单到写一个Map,里面放着一些key,value数据,就已经是个缓存了.所以缓存并不是什么高大上的技术, ...
- Spring学习笔记(三十二)——SpringBoot中cache缓存的介绍和使用
目录 Spring Boot与缓存 什么是cache java cache:JSR107 Spring缓存抽象 redis和cache的使用场景和区别 SpringBoot缓存的使用 0. 开启缓存的 ...
- springboot中缓存技术的使用、原理及其运行流程
Springboot中缓存的工作原理 要想在springboot中使用缓存,首先要了解springboot中缓存的工作原理. 我们知道springboot在启动时会有很多的自动配置类(xxx-Auto ...
- 缓存详解-在java项目中使用缓存
目录 一.概述 二.java常用的缓存 三.使用缓存将会面临的一些问题 穿透 雪崩 击穿 总结 三.缓存淘汰策略 缓存淘汰 在Spring项目中优雅的实现缓存 二级缓存推荐的实现 一.概述 在java ...
- 【SpringBoot】27、SpringBoot中整合Ehcache实现热点数据缓存
EhCache 是一个纯 Java 的进程内缓存框架,具有快速.精干等特点,是 Hibernate 中默认的 CacheProvider.用惯了 Redis,很多人可能已经忘记了还有 EhCache ...
- springBoot中shiro与Redis整合的配置文件
springBoot中shiro与Redis整合的配置文件 整合依赖: < ...
- 【SpringBoot】在SpringBoot中使用Ehcache
SpringBoot提供了对缓存的支持,通过在启动类中添加@EnableCaching注解自动化配置合适的缓存管理器(CacheManager),Spring Boot根据下面的顺序去侦测缓存提供者: ...
- SpringBoot中使用Shiro和JWT做认证和鉴权
最近新做的项目中使用了shiro和jwt来做简单的权限验证,在和springboot集成的过程中碰到了不少坑.做完之后对shiro的体系架构了解的也差不多了,现在把中间需要注意的点放出来,给大家做个参 ...
- 学习Spring Boot:(十九)Shiro 中使用缓存
前言 在 shiro 中每次去拦截请求进行权限认证的时候,都会去数据库查询该用户的所有权限信息, 这个时候就是有一个问题了,因为用户的权限信息在短时间内是不可变的,每次查询出来的数据其实都是重复数据, ...
最新文章
- iOS 9应用开发教程之ios9中实现按钮的响应
- 跟我一起写 Makefile(九)
- python中df去重_Python中DataFrame去重
- MySQL上线,检查数据库设计的“十条合规”
- 汪华关于移动互联网兴起三大问题的解决
- 算法竞赛入门【码蹄集新手村600题】(MT1351-1400)
- 【语音处理】音频信号分析仪Matlab系统
- ARIMA模型的定阶原理与建模分析
- php后台您没有权限访问该页面,登陆微信公共平台提示没有权限访问该页面请点击返回首页现象的解决办法...
- 纯C++版俄罗斯方块
- Androi实现三个页面跳转
- 计算机excel按F4是那个公式,功能键F4你真的会用?Excel四大F4快捷操作,轻松解决工作中问题...
- c语言二分法查找数组元素,c语言二分法如何实现查找数组元素
- 微信图文信息自动跳转
- 北邮数据挖掘文本分类实验
- 云数据中心与传统数据中心
- 中国电子签名发展研究报告(2006-2007年)
- CUID卡抠抠复制浅谈
- java日历制作_java简单日历的制作代码
- ISO-8859系列标准
热门文章
- vb 读取mysql所有表名_vb怎么列举出一个mdb数据库里面所有表名?
- 五年一贯制专转本计算机网络真题,金陵科技学院2017年五年一贯制专转本考试大纲(计算机网络基础)...
- 在linux环境下安装wiringpi库,wiringPi库的pwm配置及使用说明
- linux中gedit中定义变量,linux中的gedit
- 物理搬砖问题_全职业通用,搬砖市场装备
- html还原ui,前端高度还原设计稿(字体篇)
- mysql中为表创建副本_如何为数据库建立一个副本?
- 中级软件测试笔试题100精讲_汇集上千位软件测试精英面试笔试题,最全面的题型都在这!...
- MySQL 数据库 like 语句通配符模糊查询小结
- 使用百度云智能SDK和树莓派搭建简易的人脸识别系统 Python语言版