一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

第十章:Shiro的Cache

 wayne_liberary 2014-08-07

概述

nShiro開發(fā)團隊明白在許多應用程序中性能是至關重要的。Caching 是Shiro 中的一個重要功能,以確保安全操作保持盡可能的快。
n
n但是,Shiro并不實現(xiàn)緩存的功能,Shiro 的緩存支持基本上是一個抽象的(包裝)API,它將“坐”在一個基本的緩存機制產(chǎn)品(例如,Ehcache,OSCache,Terracotta,Coherence,GigaSpaces,JBossCache 等)之上。這允許Shiro終端用戶配置他們喜歡的任何緩存機制。
Caching API
nShiro 有三個重要的緩存接口:

1:CacheManager - 負責所有緩存的主要管理組件,它返回Cache 實例

2:Cache - 維護key/value 對

3:CacheManagerAware - 通過想要接收和使用CacheManager 實例的組件來實現(xiàn)

n
nCacheManager 返回Cache 實例,各種不同的Shiro 組件使用這些Cache 實例來緩存必要的數(shù)據(jù)。任何實現(xiàn)了CacheManagerAware 的Shiro 組件將會自動地接收一個配置好的CacheManager,該CacheManager 能夠用來獲取Cache 實例。
n
nShiro 的SecurityManager 實現(xiàn)及所有AuthorizingRealm實現(xiàn)都實現(xiàn)了CacheManagerAware
n
nShiro 提供了一個個立即可用的EhCacheManager 實現(xiàn)
Caching 配置
n通過在SecurityManager上設置了CacheManger,它反過來也會將它設置到實現(xiàn)了CacheManagerAware 的各種不同的Realm 上,示例如下:
n

cacheManager = org.apache.shiro.cache.ehcache.EhcacheManager

securityManager.cacheManager = $cacheManager

 

n默認的EHCache使用一個Shiro特定的ehcache.xml文件來配置,大致內(nèi)容如下:

 <cache name="shiro-activeSessionCache"

           maxElementsInMemory="10000"

           overflowToDisk="true"

           eternal="true"

           timeToLiveSeconds="0"

           timeToIdleSeconds="0"

           diskPersistent="true"

           diskExpiryThreadIntervalSeconds="600"/>

 

包裝使用其他Cache框架

n可以通過寫一個類來實現(xiàn)Shiro的CacheManager,在這個類里面包裝使用任何你想要使用的Cache框架,這里以使用Srping的緩存框架為例,參考如下:

public class MyCacheManager implements CacheManager {

    public <K, V> Cache<K, V> getCache(String name) throws CacheException {

        org.springframework.cache.Cache springCache = cacheManager.getCache(name);

        return new SpringCacheWrapper(springCache);

    }

    class SpringCacheWrapper implements Cache {

        private org.springframework.cache.Cache springCache;

        SpringCacheWrapper(org.springframework.cache.Cache springCache) {

            this.springCache = springCache;

        }

        public Object get(Object key) throws CacheException {

            Object value = springCache.get(key);

            if (value instanceof SimpleValueWrapper) {

                return ((SimpleValueWrapper) value).get();

            }

            return value;

        }

//等等,還有幾個需要實現(xiàn)的方法,都可以使用你要使用的緩存框架去實現(xiàn)

    }

}

 

 

緩存數(shù)據(jù)同步更新的解決方案

n使用Shiro的時候,緩存數(shù)據(jù)最大的問題就在于數(shù)據(jù)同步更新。
n因為Shiro只負責驗證部分,如果應用程序修改了人員的權限,那么就需要同步更新到Shiro里面去,也就是要同步Shiro的緩存數(shù)據(jù)。
n
n一個解決方案就是完全廢棄Shiro的緩存機制,自己在應用中控制數(shù)據(jù)的緩存
n
n這里給出另一種簡易可行的方案:

1:如果你使用的Spring,而且是自定義的Realm,那么可以在你的Realm里面添加一個方法來刪除該用戶的緩存數(shù)據(jù),這樣下次shiro在驗證這個用戶的時候,就會重新去獲取數(shù)據(jù),從而實現(xiàn)數(shù)據(jù)的同步

2:由于是自定義的Realm,可以把該對象作為Spring的bean,注入到你的業(yè)務對象中,在需要的時候就可以調(diào)用該方法來刪除shiro的緩存數(shù)據(jù)了

 

n示例,比如在前面自定義的MyRealm中,添加如下方法,示例如下:

public void removeUserCache(String userId){

  SimplePrincipalCollection pc = new SimplePrincipalCollection();

  pc.add(userId, super.getName()); 

  super.clearCachedAuthorizationInfo(pc);

}

n然后在HelloAnno中進行測試,示例如下:

1:要注入MyRealm,但注意需要使用getter/setter來注入

2:在main方法中,示例如下:

public static void main(String[] args) {

   ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

   HelloAnno t = (HelloAnno)ctx.getBean("helloAnno");

   t.login();

   t.t();

   

   t.t();

   

   t.getMr().removeUserCache("javass");

   t.t();

  }

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日韩一区二区免费在线观看| 国产av天堂一区二区三区粉嫩| 亚洲成人黄色一级大片| 国产精品亚洲综合色区韩国| 日本欧美一区二区三区就| 最近日韩在线免费黄片| 日韩精品成区中文字幕| 在线九月婷婷丁香伊人| 精品亚洲av一区二区三区| 国产又色又爽又黄的精品视频| 黄片免费观看一区二区| 国产成人综合亚洲欧美日韩| 欧美日韩亚洲国产综合网| 国产偷拍盗摄一区二区| 中文字幕人妻一区二区免费| 五月情婷婷综合激情综合狠狠 | 亚洲一区二区欧美激情| 黄片免费在线观看日韩| 亚洲高清中文字幕一区二区三区| 热情的邻居在线中文字幕| 国内自拍偷拍福利视频| 国内自拍偷拍福利视频| 国产精品熟女在线视频| 这里只有九九热精品视频| 国产精品乱子伦一区二区三区| 日本高清一区免费不卡| 欧美日韩在线第一页日韩| 欧美韩日在线观看一区 | 中文字幕一二区在线观看| 日本加勒比系列在线播放| 天堂网中文字幕在线观看| 中文字幕精品一区二区三| 熟妇人妻av中文字幕老熟妇| 国产成人午夜福利片片| 好吊妞视频免费在线观看| 沐浴偷拍一区二区视频| 丝袜av一区二区三区四区五区 | 免费播放一区二区三区四区 | av中文字幕一区二区三区在线| 韩国日本欧美国产三级| 中文字幕亚洲人妻在线视频|