SpringBoot集成shiro和ehcache

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()

这个信息就只打印一次了,说明我们的缓存生效了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值