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);
}
}
何をやっているのですか?また、あなたはシングルトンのパターンを見ましたか?この問題は、それが何のためのものなのですか? – JoeG
シングルトンパターンには注意が必要です。あなたが遅れて実行すると、初期化に関する並行性の問題が発生しやすくなります。 – Kurtymckurt