Shiro學習筆記(6)——shiro快取
阿新 • • 發佈:2019-01-26
快取
每一次給使用者授權時,都是通過realm從資料庫中查詢許可權,為了避免頻繁的查詢資料庫,shiro給我們提供了快取的能力
使用者認證通過後:
第一次授權:通過realm從資料庫中查詢
第二次授權:直接從快取中查詢
引入包
1. shiro-ehcache.jar
2. ehcache-core.jar
配置快取
建立快取檔案
在src下建立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>
配置快取管理器
<!-- securityManager安全管理器 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager" >
<property name="realm" ref="userRealm" />
<!-- 注入快取管理器 -->
<property name="cacheManager" ref="cacheManager"/>
</bean>
<!-- 快取管理器 -->
<bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
<property name="cacheManagerConfigFile" value="classpath:shiro-ehcache.xml"/>
</bean>
清除快取
一般情況下,使用者正常退出和非正常退出(如關閉瀏覽器)都會自動清空快取,但是有時候我們需要手動清空快取。
例如:修改了一個使用者的許可權,需要手動清空快取,否則這個使用者只要不退出,許可權就一直不改變。
手動情況快取需要在realm中定義一個方法,然後在其他程式碼中呼叫它
在reaml中定義:
//清除快取
public void clearCached() {
PrincipalCollection principals = SecurityUtils.getSubject().getPrincipals();
super.clearCache(principals);
}
在其他程式碼中呼叫:先注入reaml,在執行clearCached方法
@autowire
private UserRealm userRealm;
userRealm.clearCached();