1. 程式人生 > >Shiro緩存(十三)

Shiro緩存(十三)

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緩存(十三)