2015-10-21 9 views
9

私のアプリケーションのどの部分でもShiroフレームワークのcacheManagerオブジェクトへの参照を取得するにはどうすればよいですか?たとえば、ユーザーの削除中またはそのアクセス許可の更新中にキャッシュされた古いユーザーデータを削除したいとします。 は今、私はこのクラスを使用すると、キャッシュを利用している唯一の場所である場合、あなたはキャッシュへの最後の参照を保持することができ、次のようアプリケーションの任意の部分でshiroフレームワークからcacheManagerを取得する方法

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

何をやっているのですか?また、あなたはシングルトンのパターンを見ましたか?この問題は、それが何のためのものなのですか? – JoeG

+0

シングルトンパターンには注意が必要です。あなたが遅れて実行すると、初期化に関する並行性の問題が発生しやすくなります。 – Kurtymckurt

答えて

0

それを処理しています。キャッシュマネージャーとキャッシュを何度も呼び出すために呼び出して使用することはありません。

キャッシュマネージャがその時点で初期化されていることがわかっている場合は、コンストラクタでそれを実行することをおすすめします。

関連する問題