
io.dropwizard.auth.CachingAuthenticator Maven / Gradle / Ivy
package io.dropwizard.auth;
import com.codahale.metrics.Meter;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.Timer;
import com.google.common.base.Predicate;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheBuilderSpec;
import com.google.common.cache.CacheStats;
import com.google.common.collect.Sets;
import java.security.Principal;
import java.util.Optional;
import static com.codahale.metrics.MetricRegistry.name;
/**
* An {@link Authenticator} decorator which uses a Guava cache to temporarily cache credentials and
* their corresponding principals.
*
* @param the type of credentials the authenticator can authenticate
* @param the type of principals the authenticator returns
*/
public class CachingAuthenticator implements Authenticator {
private final Authenticator underlying;
private final Cache> cache;
private final Meter cacheMisses;
private final Timer gets;
/**
* Creates a new cached authenticator.
*
* @param metricRegistry the application's registry of metrics
* @param authenticator the underlying authenticator
* @param cacheSpec a {@link CacheBuilderSpec}
*/
public CachingAuthenticator(final MetricRegistry metricRegistry,
final Authenticator authenticator,
final CacheBuilderSpec cacheSpec) {
this(metricRegistry, authenticator, CacheBuilder.from(cacheSpec));
}
/**
* Creates a new cached authenticator.
*
* @param metricRegistry the application's registry of metrics
* @param authenticator the underlying authenticator
* @param builder a {@link CacheBuilder}
*/
public CachingAuthenticator(final MetricRegistry metricRegistry,
final Authenticator authenticator,
final CacheBuilder