Come posso ottenere un riferimento all'oggetto cacheManager nel framework Shiro in qualsiasi parte della mia applicazione? Ad esempio, voglio rimuovere i vecchi dati utente che sono stati memorizzati nella cache durante la rimozione di un utente o l'aggiornamento della sua autorizzazione. In questo momento sto maneggiarlo modo seguenteCome posso ottenere il cacheManager dal framework shiro in qualsiasi parte dell'applicazione
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);
}
}
Cosa c'è di sbagliato in quello che stai facendo? Inoltre, hai guardato il pattern Singleton? Questo problema è praticamente quello che è! – JoeG
Devi stare attento con il modello singleton. Sei suscettibile di problemi di concorrenza con l'inizializzazione se lo fai pigramente. – Kurtymckurt