package org.picketlink.identity.federation.bindings.jboss.auth; import java.security.Principal; import java.util.Date; import java.util.Timer; import java.util.TimerTask; import javax.naming.InitialContext; import org.jboss.security.CacheableManager; import org.jboss.security.SecurityConstants; import org.picketlink.identity.federation.PicketLinkLogger; import org.picketlink.identity.federation.PicketLinkLoggerFactory; import org.picketlink.identity.federation.core.factories.JBossAuthCacheInvalidationFactory.TimeCacheExpiry; public class AS7AuthCacheInvalidationFactory { public static TimeCacheExpiry getCacheExpiry() { return AS7ExpiringPrincipalCacheInvalidation.get(); } protected static class AS7ExpiringPrincipalCacheInvalidation implements TimeCacheExpiry { private static final PicketLinkLogger logger = PicketLinkLoggerFactory.getLogger(); protected static Timer timer = new Timer(); protected static AS7ExpiringPrincipalCacheInvalidation _instance = null; protected AS7ExpiringPrincipalCacheInvalidation() { } protected static AS7ExpiringPrincipalCacheInvalidation get() { if (_instance == null) _instance = new AS7ExpiringPrincipalCacheInvalidation(); return _instance; } public void register(final String securityDomain, final Date expiry, final Principal principal) { try { timer.purge(); } catch (Exception e) { logger.trace("Exception in purging timer tasks:", e); } try { timer.schedule(new TimerTask() { @Override public void run() { try { String lookupDomain = securityDomain; if (lookupDomain.startsWith(SecurityConstants.JAAS_CONTEXT_ROOT) == false) lookupDomain = SecurityConstants.JAAS_CONTEXT_ROOT + "/" + lookupDomain; // lookup the JBossCachedAuthManager. InitialContext context = new InitialContext(); CacheableManager manager = (CacheableManager) context.lookup(lookupDomain); // Flush the Authentication Cache manager.flushCache(principal); } catch (Exception e) { logger.trace("Exception in scheduling timer:", e); } } }, expiry); } catch (Exception e) { logger.trace("Exception in scheduling timer:", e); } } } }