package io.dropwizard.auth; import com.codahale.metrics.MetricRegistry; import io.dropwizard.jersey.DropwizardResourceConfig; import org.glassfish.hk2.utilities.binding.AbstractBinder; import org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature; import javax.ws.rs.container.ContainerRequestFilter; import javax.ws.rs.container.DynamicFeature; import java.security.Principal; public abstract class AbstractAuthResourceConfig extends DropwizardResourceConfig { public AbstractAuthResourceConfig() { super(true, new MetricRegistry()); register(getAuthDynamicFeature(getAuthFilter())); register(getAuthBinder()); register(RolesAllowedDynamicFeature.class); } /** * @return The type of injected principal instance. */ protected Class<? extends Principal> getPrincipalClass() { return Principal.class; } /** * @return The binder to use for injecting request authentication. */ protected AbstractBinder getAuthBinder() { return new AuthValueFactoryProvider.Binder<>(getPrincipalClass()); } /** * @return The {@link DynamicFeature} used to register a request * authentication provider. */ protected DynamicFeature getAuthDynamicFeature(ContainerRequestFilter authFilter) { return new AuthDynamicFeature(authFilter); } /** * @return The {@link ContainerRequestFilter} to use for request * authentication. */ protected abstract ContainerRequestFilter getAuthFilter(); }