2015-10-21 10 views
9

Uygulamamın herhangi bir bölümünde Shiro çerçevesinde cacheManager nesnesine nasıl başvuru yapabilirim? Örneğin, bir kullanıcının kaldırılması sırasında önbelleğe alınmış eski kullanıcı verilerini kaldırmak veya izinlerini güncellemek istiyorum. Bu sınıf önbelleği kullanan tek yer ise Şu anda bu aradacacheManager'ı shiro çerçevesinden, uygulamanın herhangi bir bölümünde nasıl edinebilirim

public void cleanUserCache(final String userName) { 
     final EmbeddedCacheManager embeddedCacheManager = securityRealmsProducer.getEmbeddedCacheManger(); 
     final Cache<Object, Object> authenticationCache = embeddedCacheManager.getCache("JPA-Auth-Realm.authenticationCache"); 
     final Cache<Object, Object> authrizationCache = embeddedCacheManager.getCache("JPA-Auth-Realm.authorizationCache"); 
     final Object userAuthenticationInfo = authenticationCache.get(userName); 
     if (userAuthenticationInfo != null) { 
      authenticationCache.remove(userName); 
      final SimpleAuthenticationInfo principle = (SimpleAuthenticationInfo) userAuthenticationInfo; 
      final SimplePrincipalCollection simple = (SimplePrincipalCollection) principle.getPrincipals(); 
      authorizationCache.remove(simple); 
     } 
    } 
+0

Yaptıklarınızla ilgili sorun nedir? Ayrıca, Singleton modeline baktın mı? Bu sorun ne için olduğu oldukça fazla! – JoeG

+0

Tekil desenli modele dikkat etmelisiniz. Tembelleşirseniz, başlatma ile eşzamanlılık sorunlarına karşı hassassınız. – Kurtymckurt

cevap

0

aşağıdaki hallediyorum ediyorum, sen önbelleğe son başvuru tutabilir. Önbellek yöneticisi ve önbellekleri tekrar tekrar almak için aramada hiçbir faydası yok.

Önbellek yöneticisinin bu noktada başlatıldığını biliyorsanız, bunu yapıcıda yapmanızı öneririz.

İlgili konular