Shiro緩存(十三)
阿新 • • 發佈:2017-07-30
cee bsd udf 手動 kvc ffd vcg gsm rpd
使用緩存,可以解決每次訪問請求都查數據庫的問題。第一次授權後存入緩存。
緩存流程
shiro中提供了對認證信息和授權信息的緩存。shiro默認是關閉認證信息緩存的,對於授權信息的緩存shiro默認開啟的。主要研究授權信息緩存,因為授權的數據量大。
用戶認證通過。
該 用戶第一次授權:調用realm查詢數據庫
該 用戶第二次授權:不調用realm查詢數據庫,直接從緩存中取出授權信息(權限標識符)。
-------------------------------------使用ehcache緩存框架------------------------------
添加Jar包:
配置cacheManager
註入securityManager
classpath下配置shiro-ehcache.xml
到這裏就可以使用緩存了,用戶登進去一次之後訪問系統不會每次都查詢數據庫查詢權限
------------------------------------------------緩存清-空--------------------------
如果用戶正常退出,緩存自動清空。
如果用戶非正常退出,緩存自動清空。
如果修改了用戶的權限,而用戶不退出系統,修改的權限無法立即生效。
需要手動進行編程實現:
在權限修改後調用realm的clearCache方法清除緩存。
正常開發時要放在service中調用。
在service中,權限修改後調用realm的清空緩存方法。
在realm中定義clearCached方法:
// 清除緩存 public void clearCached() { PrincipalCollection principals = SecurityUtils.getSubject().getPrincipals(); super.clearCache(principals); }
測試清除緩存controller方法:
Shiro緩存(十三)