標籤:red manager www splay 持久化 sch 清除緩衝 over 自動
一、Ehcache
shiro每次授權都會通過realm擷取許可權資訊,為了提高訪問速度需要添加緩衝,第一次從realm中讀取許可權資料,之後不再讀取,這裡Shiro和Ehcache整合。
1、添加Ehcache的jar包
<dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> <version>2.5.3</version> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-ehcache</artifactId> <version>1.3.2</version> </dependency>
View Code2、配置cacheManager
在applicationContext-shiro.xml中配置緩衝管理器。
<!-- securityManager安全管理器 --> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="realm" ref="customRealm"/> <!-- 注入緩衝管理器 --> <property name="cacheManager" ref="cacheManager"/> <!-- 注入session管理器 --> <property name="sessionManager" ref="sessionManager"/> <!-- 記住我 --> <property name="rememberMeManager" ref="rememberMeManager"/> </bean> <!-- 緩衝管理器 --> <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager"> <property name="cacheManagerConfigFile" value="classpath:shiro-ehcache.xml"/> </bean>
3、配置shiro-ehcache.xml
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"> <!--diskStore:快取資料持久化的目錄 地址 --> <diskStore path="F:\develop\ehcache" /> <defaultCache maxElementsInMemory="1000" maxElementsOnDisk="10000000" eternal="false" overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="120" timeToLiveSeconds="120" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU"> </defaultCache></ehcache>
View Code4、清空緩衝
當使用者權限修改後,使用者再次登陸shiro會自動調用realm從資料庫擷取許可權資料,如果在修改許可權後想立即清除緩衝則可以調用realm的clearCache方法清除緩衝。
realm中定義clearCached方法:
//清除緩衝 public void clearCached() { PrincipalCollection principals = SecurityUtils.getSubject().getPrincipals(); super.clearCache(principals); }
在許可權修改後調用realm中的方法,realm已經由spring管理,所以從spring中擷取realm執行個體,調用clearCached方法。
010-shiro與spring web項目整合【四】緩衝Ehcache、Redis