package io.dropwizard.auth.principal;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Contains resource methods which don't authenticate but use principal instance injection and thus might be affected by authentication logic.
*/
@Path("/no-auth-test")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.TEXT_PLAIN)
public class NoAuthPrincipalEntityResource {
/**
* Principal instance must be injected even when no authentication is required.
*/
@POST
@Path("principal-entity")
public String principalEntityWithoutAuth(JsonPrincipal principal) {
assertThat(principal).isNotNull();
return principal.getName();
}
/**
* Annotated principal instance must be injected even when no authentication is required.
*/
@POST
@Path("annotated-principal-entity")
public String annotatedPrincipalEntityWithoutAuth(@DummyAnnotation JsonPrincipal principal) {
assertThat(principal).isNotNull();
return principal.getName();
}
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.PARAMETER })
public @interface DummyAnnotation {
}
}