spring boot集成shiro与ehcache
主要分这么几个步骤:在pom.xml中加入缓存依赖;注入缓存;
(a) 在pom.xml文件中加入依赖:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<!-- shiro ehcache -->
<
dependency
>
<
groupId
>org.apache.shiro</
groupId
>
<
artifactId
>shiro-ehcache</
artifactId
>
<
version
>1.2.2</
version
>
</
dependency
>
<!--
包含支持UI模版(Velocity,FreeMarker,JasperReports),
邮件服务,
脚本服务(JRuby),
缓存Cache(EHCache),
任务计划Scheduling(uartz)。
-->
<
dependency
>
<
groupId
>org.springframework</
groupId
>
<
artifactId
>spring-context-support</
artifactId
>
</
dependency
>
|
(b)注入缓存
在com.kfit.config.shiro.ShiroConfiguration中加入如下方法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/**
* shiro缓存管理器;
* 需要注入对应的其它的实体类中:
* 1、安全管理器:securityManager
* 可见securityManager是整个shiro的核心;
* @return
*/
@Bean
public
EhCacheManager ehCacheManager(){
System.out.println(
"ShiroConfiguration.getEhCacheManager()"
);
EhCacheManager cacheManager =
new
EhCacheManager();
cacheManager.setCacheManagerConfigFile(
"classpath:config/ehcache-shiro.xml"
);
returncacheManager;
}
|
将缓存对象注入到SecurityManager中:
1
2
3
4
5
6
7
8
9
10
11
|
@Bean
public
SecurityManager securityManager(){
DefaultWebSecurityManager securityManager =
new
DefaultWebSecurityManager();
//设置realm.
securityManager.setRealm(myShiroRealm());
//注入缓存管理器;
securityManager.setCacheManager(ehCacheManager());
//这个如果执行多次,也是同样的一个对象;
returnsecurityManager;
}
|
(c)添加缓存配置文件:
在src/main/resouces/config添加ehcache-shiro.xml配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
<?
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,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。
-->
<
defaultCache
maxElementsInMemory
=
"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()
这个信息就只打印一次了,说明我们的缓存生效了。