天天看點

shiro實戰系列(十一)之Caching

Shiro 開發團隊明白在許多應用程式中性能是至關重要的。Caching 是從第一天開始第一個建立在 Shiro 中的一流功 能,以確定安全操作保持盡可能的快。   然而,Caching 作為一個概念是 Shiro 的基本組成部分,實作一個完整的緩存機制是安全架構核心能力之外的事情。 為此,Shiro 的緩存支援基本上是一個抽象的(包裝)API,它将“坐”在一個基本的緩存機制産品(例如,Ehcache, OSCache,Terracotta,Coherence,GigaSpaces,JBossCache 等)之上。這允許 Shiro 終端使用者配置他們喜歡的任何緩 存機制。

(1)Caching API Shiro 有三個重要的緩存接口: CacheManager - 負責所有緩存的主要管理元件,它傳回 Cache 執行個體。

(2) Cache - 維護 key/value 對。

(3)CacheManagerAware - 通過想要接收和使用 CacheManager 執行個體的元件來實作。   CacheManager 傳回 Cache 執行個體,各種不同的 Shiro 元件使用這些 Cache 執行個體來緩存必要的資料。任何實作了 CacheManagerAware 的 Shiro 元件将會自動地接收一個配置好的 CacheManager,該 CacheManager 能夠用來擷取 Cache 執行個體。 

 Shiro的 SecurityManager 實作及所有 AuthorizingRealm實作都實作了 CacheManagerAware。如果你在 SecurityManager 上設定了 CacheManger,它反過來也會将它設定到實作了 CacheManagerAware 的各種不同的 Realm 上(OO delegation)。例如,在 shiro.ini 中:  

shiro實戰系列(十一)之Caching

我們擁有一個立即可用的 EhCacheManager 實作,是以,如果你想的話,今天都可以使用。相反地,你可以實作自 己的 CacheManager(如使用 Coherence 等),并像上面那樣配置它,你會取得很好的效果的。

Authorization Cache Invalidation

最後請注意 AuthorizingRealm 有一個 clearCachedAuthorizationInfo 方法能夠被子類調用,用來清除特殊賬戶緩存的 授權資訊。它通常被自定義邏輯調用,如果與之比對的賬戶授權資料發生了改變(來確定下次的授權檢查能夠捕獲 新資料)。

繼續閱讀