package support.security.auth; import java.security.Principal; import javax.ws.rs.core.Context; import javax.ws.rs.core.SecurityContext; import org.glassfish.hk2.api.Factory; import support.security.annotation.Auth; import support.security.auth.AuthFactoryProvider.Binder; /** * @param <P> * * @author nikku */ public class AuthFactory<P extends Principal> implements Factory<P> { private final Class<P> principalClass; @Context private SecurityContext securityContext; public AuthFactory(Class<P> principalClass) { this.principalClass = principalClass; } public Class<P> getPrincipalClass() { return principalClass; } @Override public P provide() { Principal principal = securityContext.getUserPrincipal(); return principalClass.cast(principal); } @Override public void dispose(P instance) { } /** * Static utility to setup injection of the user principal into * {@link Auth} annotated resource method parameter. * * @param <P> * @param authFactory * * @return */ public static <P extends Principal> Binder<P> binder(AuthFactory<P> authFactory) { return new AuthFactoryProvider.Binder(authFactory); } }