亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 服務器 > Web服務器 > 正文

shiro緩存機實例代碼

2024-09-01 13:52:59
字體:
來源:轉載
供稿:網友

Shiro提供了類似于Spring的Cache抽象,即Shiro本身不實現Cache,但是對Cache進行了又抽象,方便更換不同的底層Cache實現。 

Shiro提供的Cache接口: 

Java代碼  

public interface Cache<K, V> {  //根據Key獲取緩存中的值  public V get(K key) throws CacheException;  //往緩存中放入key-value,返回緩存中之前的值  public V put(K key, V value) throws CacheException;  //移除緩存中key對應的值,返回該值  public V remove(K key) throws CacheException;  //清空整個緩存  public void clear() throws CacheException;  //返回緩存大小  public int size();  //獲取緩存中所有的key  public Set<K> keys();  //獲取緩存中所有的value  public Collection<V> values(); } 

Shiro提供的CacheManager接口: 

Java代碼 

public interface CacheManager {  //根據緩存名字獲取一個Cache  public <K, V> Cache<K, V> getCache(String name) throws CacheException; } 

Shiro還提供了CacheManagerAware用于注入CacheManager: 

Java代碼  

public interface CacheManagerAware {  //注入CacheManager  void setCacheManager(CacheManager cacheManager); } 

Shiro內部相應的組件(DefaultSecurityManager)會自動檢測相應的對象(如Realm)是否實現了CacheManagerAware并自動注入相應的CacheManager。  

Realm緩存

Shiro提供了CachingRealm,其實現了CacheManagerAware接口,提供了緩存的一些基礎實現;另外AuthenticatingRealm及AuthorizingRealm分別提供了對AuthenticationInfo 和AuthorizationInfo信息的緩存。 

ini配置   

Java代碼  

userRealm=com.github.zhangkaitao.shiro.chapter11.realm.UserRealm userRealm.credentialsMatcher=$credentialsMatcher userRealm.cachingEnabled=true userRealm.authenticationCachingEnabled=true userRealm.authenticationCacheName=authenticationCacheuserRealm.authorizationCachingEnabled=true userRealm.authorizationCacheName=authorizationCache securityManager.realms=$userRealm cacheManager=org.apache.shiro.cache.ehcache.EhCacheManager cacheManager.cacheManagerConfigFile=classpath:shiro-ehcache.xml securityManager.cacheManager=$cacheManager 

userRealm.cachingEnabled:啟用緩存,默認false;
userRealm.authenticationCachingEnabled:啟用身份驗證緩存,即緩存AuthenticationInfo信息,默認false;
userRealm.authenticationCacheName:緩存AuthenticationInfo信息的緩存名稱;
userRealm. authorizationCachingEnabled:啟用授權緩存,即緩存AuthorizationInfo信息,默認false;
userRealm. authorizationCacheName:緩存AuthorizationInfo信息的緩存名稱;

cacheManager:緩存管理器,此處使用EhCacheManager,即Ehcache實現,需要導入相應的Ehcache依賴,請參考pom.xml; 

因為測試用例的關系,需要將Ehcache的CacheManager改為使用VM單例模式:

this.manager = new net.sf.ehcache.CacheManager(getCacheManagerConfigFileInputStream());

改為

this.manager = net.sf.ehcache.CacheManager.create(getCacheManagerConfigFileInputStream()); 

測試用例 

Java代碼  

@Test public void testClearCachedAuthenticationInfo() {  login(u1.getUsername(), password);  userService.changePassword(u1.getId(), password + "1");   RealmSecurityManager securityManager =   (RealmSecurityManager) SecurityUtils.getSecurityManager();  UserRealm userRealm = (UserRealm) securityManager.getRealms().iterator().next();  userRealm.clearCachedAuthenticationInfo(subject().getPrincipals());  login(u1.getUsername(), password + "1"); } 

首先登錄成功(此時會緩存相應的AuthenticationInfo),然后修改密碼;此時密碼就變了;接著需要調用Realm的clearCachedAuthenticationInfo方法清空之前緩存的AuthenticationInfo;否則下次登錄時還會獲取到修改密碼之前的那個AuthenticationInfo;

Java代碼  

@Test public void testClearCachedAuthorizationInfo() {  login(u1.getUsername(), password);  subject().checkRole(r1.getRole());  userService.correlationRoles(u1.getId(), r2.getId());   RealmSecurityManager securityManager =   (RealmSecurityManager) SecurityUtils.getSecurityManager();  UserRealm userRealm = (UserRealm)securityManager.getRealms().iterator().next();  userRealm.clearCachedAuthorizationInfo(subject().getPrincipals());  subject().checkRole(r2.getRole()); } 

和之前的用例差不多;此處調用Realm的clearCachedAuthorizationInfo清空之前緩存的AuthorizationInfo; 

另外還有clearCache,其同時調用clearCachedAuthenticationInfo和clearCachedAuthorizationInfo,清空AuthenticationInfo和AuthorizationInfo。 

UserRealm還提供了clearAllCachedAuthorizationInfo、clearAllCachedAuthenticationInfo、clearAllCache,用于清空整個緩存。

在某些清空下這種方式可能不是最好的選擇,可以考慮直接廢棄Shiro的緩存,然后自己通過如AOP機制實現自己的緩存;可以參考:

https://github.com/zhangkaitao/es/tree/master/web/src/main/java/com/sishuok/es/extra/aop

另外如果和Spring集成時可以考慮直接使用Spring的Cache抽象,可以考慮使用SpringCacheManagerWrapper,其對Spring Cache進行了包裝,轉換為Shiro的CacheManager實現:

https://github.com/zhangkaitao/es/blob/master/web/src/main/java/org/apache/shiro/cache/spring/SpringCacheManagerWrapper.java  

Session緩存

當我們設置了SecurityManager的CacheManager時,如:

Java代碼  

securityManager.cacheManager=$cacheManager 

當我們設置SessionManager時:

Java代碼 

sessionManager=org.apache.shiro.session.mgt.DefaultSessionManager securityManager.sessionManager=$sessionManager 

如securityManager實現了SessionsSecurityManager,其會自動判斷SessionManager是否實現了CacheManagerAware接口,如果實現了會把CacheManager設置給它。然后sessionManager會判斷相應的sessionDAO(如繼承自CachingSessionDAO)是否實現了CacheManagerAware,如果實現了會把CacheManager設置給它;如第九章的MySessionDAO就是帶緩存的SessionDAO;其會先查緩存,如果找不到才查數據庫。

對于CachingSessionDAO,可以通過如下配置設置緩存的名稱:

Java代碼  

sessionDAO=com.github.zhangkaitao.shiro.chapter11.session.dao.MySessionDAO sessionDAO.activeSessionsCacheName=shiro-activeSessionCache activeSessionsCacheName默認就是shiro-activeSessionCache。

總結

以上所述是小編給大家介紹的shiro緩存機實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲色图av在线| 日韩亚洲欧美中文高清在线| 久久久国产成人精品| 久久影视电视剧免费网站| 国产精品99久久久久久人| 色婷婷久久一区二区| 日韩一区二区在线视频| 91视频国产高清| 久久久久久久久久国产精品| 亚洲国产婷婷香蕉久久久久久| 精品久久久香蕉免费精品视频| 精品国产91乱高清在线观看| 欧美孕妇性xx| 国产精品白嫩美女在线观看| 亚洲福利视频二区| 日韩国产精品视频| 69国产精品成人在线播放| 91精品国产综合久久久久久久久| 久久久久在线观看| 欧美激情网站在线观看| 久久香蕉国产线看观看av| 欧美日韩久久久久| 欧美综合一区第一页| 最近更新的2019中文字幕| 欧美激情免费看| 国产中文字幕91| 亚洲аv电影天堂网| 欧美超级免费视 在线| 92看片淫黄大片看国产片| 亚洲情综合五月天| 欧美自拍大量在线观看| 精品日本美女福利在线观看| 91免费综合在线| 亚洲欧美在线播放| 国产成人鲁鲁免费视频a| 亚洲欧美中文日韩在线v日本| 亚洲一区中文字幕在线观看| 欧美激情第99页| 91亚洲国产成人久久精品网站| 亚洲午夜激情免费视频| 奇门遁甲1982国语版免费观看高清| 91中文精品字幕在线视频| 性色av一区二区咪爱| 久久影院中文字幕| 亚洲成人a**站| 久久久久久久久久久免费| 国产日韩欧美中文| 欧美大片在线看免费观看| 一色桃子一区二区| 国产精品久久久久久久久免费| 国产精品高清免费在线观看| 亚洲а∨天堂久久精品喷水| 精品综合久久久久久97| 日韩在线一区二区三区免费视频| 97婷婷大伊香蕉精品视频| 亚洲欧美日韩精品久久| 国产91成人video| 成人a在线视频| 国产成人亚洲综合| 国产精品99蜜臀久久不卡二区| 日韩免费视频在线观看| 亚洲欧美在线免费| 久久在线视频在线| 久久久国产一区| 欧美成人精品xxx| 成人羞羞国产免费| 在线视频亚洲欧美| 久久777国产线看观看精品| 日韩欧美a级成人黄色| 精品视频在线播放免| 国产视频丨精品|在线观看| 中文字幕欧美视频在线| 伊人亚洲福利一区二区三区| 日韩精品在线私人| 成人精品一区二区三区| 国产成人极品视频| 精品久久国产精品| 激情av一区二区| 在线播放日韩欧美| 日本老师69xxx| 久久影视电视剧凤归四时歌| 在线播放日韩精品| 九九视频直播综合网| 亚州欧美日韩中文视频| 亚洲国产精彩中文乱码av| 国产亚洲精品久久久久久牛牛| 美女性感视频久久久| 国产成人精品免高潮费视频| 精品偷拍各种wc美女嘘嘘| 精品久久香蕉国产线看观看亚洲| 91精品综合久久久久久五月天| 亚洲精品久久久久久久久久久久久| 欧美激情视频播放| 久久久久久久久久久免费| 亚洲最大成人免费视频| 亚洲日本成人女熟在线观看| 久久久爽爽爽美女图片| 国产精品欧美激情在线播放| 另类图片亚洲另类| 国产亚洲精品一区二区| 45www国产精品网站| 国产日韩av在线| 欧美日韩免费在线| 欧美精品18videosex性欧美| 大荫蒂欧美视频另类xxxx| 亚洲男人7777| 欧美中文字幕在线视频| 欧美视频在线观看免费| 国产亚洲精品久久久| 97在线视频免费看| 国产精品美女免费看| 国产美女精品视频| 欧美电影在线免费观看网站| 久久99久国产精品黄毛片入口| 日韩av在线天堂网| 粉嫩老牛aⅴ一区二区三区| 亚洲精品91美女久久久久久久| 国产亚洲精品美女久久久| 日本精品一区二区三区在线播放视频| 欧美三级欧美成人高清www| 亚洲国产成人爱av在线播放| 欧美一级大片视频| 成人xxxx视频| 欧美电影在线观看高清| 久久久久一本一区二区青青蜜月| 成人免费福利视频| 国产999精品| 亚洲精品wwww| 亚洲黄色成人网| 久久人人爽国产| 国产精品福利在线观看网址| 日韩视频第一页| 97国产一区二区精品久久呦| 欧美孕妇孕交黑巨大网站| 欧美激情欧美激情| 精品国产一区二区三区久久| 亚洲人成电影在线观看天堂色| 精品视频—区二区三区免费| 亚洲一区二区免费| 中文在线不卡视频| 日本不卡高字幕在线2019| 国产一区二区三区在线| 欧美男插女视频| 国产成人jvid在线播放| 亚洲欧美日韩中文在线制服| 欧美国产精品va在线观看| 精品久久久在线观看| 播播国产欧美激情| 国产精品久久一区主播| 亚洲情综合五月天| 亚洲自拍欧美另类| 亚洲在线观看视频网站| 韩国v欧美v日本v亚洲| 欧美性色xo影院| 欧美视频13p| 国产精品久久久久av免费| 成人黄色av免费在线观看| 91九色国产在线| 欧美老少做受xxxx高潮| 成人亲热视频网站| 精品久久久久久久久国产字幕| 欧美另类极品videosbest最新版本| 91情侣偷在线精品国产| 久久久成人精品|