Wie kann ich einen Verweis auf das CacheManager-Objekt im Shiro-Framework in irgendeinem Teil meiner Anwendung bekommen? Ich möchte zum Beispiel die alten Benutzerdaten entfernen, die beim Entfernen eines Benutzers oder beim Aktualisieren seiner Berechtigung zwischengespeichert wurden. Im Moment habe ich es WegWie bekomme ich den CacheManager von Shiro Framework in irgendeinem Teil der Anwendung
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);
}
}
Was stimmt nicht mit dem, was Sie tun? Haben Sie sich auch das Singleton-Muster angesehen? Dieses Problem ist ziemlich genau das, wofür es ist! – JoeG
Sie müssen vorsichtig mit dem Singleton-Muster sein. Sie sind anfällig für Nebenläufigkeitsprobleme mit der Initialisierung, wenn Sie es träge tun. – Kurtymckurt