shiro 權限集成Ehcache 配置 學習記錄(二)


1、加入依賴

 1 <dependency>
 2                 <groupId>org.apache.shiro</groupId>
 3                 <artifactId>shiro-ehcache</artifactId>
 4                 <version>${shiro.version}</version>
 5                 <exclusions>
 6                     <exclusion>
 7                         <artifactId>slf4j-api</artifactId>
 8                         <groupId>org.slf4j</groupId>
 9                     </exclusion>
10                 </exclusions>
11             </dependency>

2、在項目的resource目錄下新建立:ehcache-shiro.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <ehcache updateCheck="false" name="shiroCache">
 3 
 4     <diskStore path="C:\shiro\ehcache" />
 5 <!--     <diskStore path="java.io.tmpdir"/> -->
 6 
 7     <!--   
 8     eternal:緩存中對象是否為永久的,如果是,超時設置將被忽略,對象從不過期。  
 9     maxElementsInMemory:緩存中允許創建的最大對象數  
10     overflowToDisk:內存不足時,是否啟用磁盤緩存。  
11     timeToIdleSeconds:緩存數據的鈍化時間,也就是在一個元素消亡之前,  兩次訪問時間的最大時間間隔值,這只能在元素不是永久駐留時有效,如果該值是 0 就意味着元素可以停頓無窮長的時間。  
12     timeToLiveSeconds:緩存數據的生存時間,也就是一個元素從構建到消亡的最大時間間隔值,這只能在元素不是永久駐留時有效,如果該值是0就意味着元素可以停頓無窮長的時間。  
13     memoryStoreEvictionPolicy:緩存滿了之后的淘汰算法。  
14     diskPersistent:設定在虛擬機重啟時是否進行磁盤存儲,默認為false
15     diskExpiryThreadIntervalSeconds: 屬性可以設置該線程執行的間隔時間(默認是120秒,不能太小
16     1 FIFO,先進先出  
17     2 LFU,最少被使用,緩存的元素有一個hit屬性,hit值最小的將會被清出緩存。  
18     3 LRU,最近最少使用的,緩存的元素有一個時間戳,當緩存容量滿了,而又需要騰出地方來緩存新的元素的時候,那么現有緩存元素中時間戳離當前時間最遠的元素將被清出緩存。  
19     -->  
20     <defaultCache
21             maxElementsInMemory="10000"
22             eternal="false"
23             timeToIdleSeconds="120"
24             timeToLiveSeconds="120"
25             overflowToDisk="false"
26             diskPersistent="false"
27             diskExpiryThreadIntervalSeconds="120"
28             />
29 
30     <cache name="activeSessionCache"
31            maxElementsInMemory="10000"
32            eternal="true"
33            overflowToDisk="false"
34            diskPersistent="true"
35            diskExpiryThreadIntervalSeconds="600"/>
36            
37     <cache name="shiro.authorizationCache"
38            maxElementsInMemory="100"
39            eternal="false"
40            timeToLiveSeconds="600"
41            overflowToDisk="false"/>
42            
43 </ehcache>

3、在shiro的配置文件中  securityManager  的bean中 增加  cacheManager 屬性配置:如 下 文件中 標紅的 屬性

1 <!-- 1、安全管理器 -->
2     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
3         <property name="realm" ref="shiroDbRealm"></property>
4         <!-- 設置緩存管理器為 ehcache -->
5         <property name="cacheManager" ref="shiroEhcacheManager"></property>
6     </bean>

4、增加Ehcache的配置:如

1 <!-- 用戶授權信息Cache, 采用EhCache -->
2     <bean id="shiroEhcacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
3         <property name="cacheManagerConfigFile" value="classpath:shiro/ehcache-shiro.xml"></property>
4     </bean>

 第二:怎么清空系統的緩存

1、編寫自定義的realm:如:  ShiroDBRealm

2、注解  ShiroDBRealm  為一個  @Component  組件

3、編寫方法清理緩存:

 1 /**
 2      * 
 3      * @Description: 權限修改生效后,立即刷新清空緩存,則可以實現用戶不退出生效新的權限
 4      * 
 5      * @author admin
 6      * @date 2016年9月29日 下午9:34:07
 7      */
 8     public void clearCache() {
 9         PrincipalCollection principals = SecurityUtils.getSubject().getPrincipals();
10         super.clearCache(principals);
11     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM