更新時間:2021-11-16 10:50:04 來源:動力節點 瀏覽926次
Shiro 開發團隊明白性能在許多應用程序中至關重要。緩存是從一開始就內置到 Shiro 中的一流功能,以確保安全操作盡可能快。
然而,雖然緩存作為一個概念是 Shiro 的基本部分,但實現完整的緩存機制將超出安全框架的核心能力。為此,Shiro 的緩存支持基本上是一個抽象(包裝器)API,它將“位于”底層生產緩存機制(例如 Hazelcast、Ehcache、OSCache、Terracotta、Coherence、GigaSpaces、JBossCache 等)之上。這允許 Shiro 最終用戶配置他們喜歡的任何緩存機制。
Shiro 有三個重要的緩存接口:
CacheManager- 所有緩存的主要管理器組件,它返回Cache實例。
Cache - 維護鍵/值對
CacheManagerAware - 由希望接收和使用 CacheManager 實例的組件實現
ACacheManager返回Cache實例和各種 Shiro 組件Cache根據需要使用這些實例來緩存數據。任何實現的Shiro組件CacheManagerAware都會自動接收一個配置的CacheManager,它可以用來獲取Cache實例。
Shiro SecurityManager實現和 allAuthenticatingRealm和AuthorizingRealmimplementations 實現了 CacheManagerAware。如果您在CacheManager上設置SecurityManager,它將依次在實現 CacheManagerAware 的各種領域(OO 委托)上設置它。例如,在 shiro.ini 中:
shiro.ini CacheManager 配置示例
securityManager.realms = $myRealm1, $myRealm2, ..., $myRealmN
...
cacheManager = my.implementation.of.CacheManager
...
securityManager.cacheManager = $cacheManager
# at this point, the securityManager and all CacheManagerAware
# realms have been set with the cacheManager instance
Shiro 提供了許多開箱CacheManager即用的實現,您可能會發現它們很有用,而不是實現您自己的。
這MemoryConstrainedCacheManager是一種CacheManager適用于單 JVM 生產環境的實現。它不是集群/分布式的,因此如果您的應用程序跨越多個 JVM(例如,在多個 Web 服務器上運行的 Web 應用程序),并且您希望緩存條目可以跨 JVM 訪問,您將需要使用分布式緩存實現。
該MemoryConstrainedCacheManager管理MapCache的情況下,一個MapCache每個命名緩存實例。每個MapCache實例都由 Shiro 支持,ShiroSoftHashMap可以根據應用程序的運行時內存限制/需求(通過利用 JDKSoftReference實例)自動調整自身大小。
因為它MemoryConstrainedCacheManager可以根據應用程序的內存配置文件自動調整自身大小,所以在單 JVM 生產應用程序以及測試需求中使用它是安全的。但是,它沒有更高級的功能,例如緩存條目 Time-to-Live 或 Time-to-Expire 設置。對于這些更高級的緩存管理功能,您可能希望使用CacheManager以下更高級的產品之一。
MemoryConstrainedCacheManager shiro.ini 配置示例
...
cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager
...
securityManager.cacheManager = $cacheManager
以上就是關于“Shiro緩存管理器的實現”的介紹,如果大家想了解更多相關知識,可以關注一下動力節點的Java在線學習,里面的課程內容詳細,由淺到深,通俗易懂,適合小白學習,希望對大家能夠有所幫助。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習