ai dis-je cette ressource:Shiro: Comment écrire un test pour un point final protégé par @RequiresRoles?
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.apache.shiro.authz.annotation.RequiresAuthentication;
import org.apache.shiro.authz.annotation.RequiresRoles;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@Path("/authhello")
@Api(value = "hello", description = "Simple endpoints for testing api authentification",
hidden = true)
@Produces(MediaType.APPLICATION_JSON)
@RequiresAuthentication
public class AuthenticatedHelloWorldResource {
private static final String READ = "READ";
private static final String WRITE = "WRITE";
@GET
@ApiOperation(value = "helloworld",
notes = "Simple hello world.",
response = String.class)
@RequiresRoles(READ)
public Response helloWorld() {
String hello = "Hello world!";
return Response.status(Response.Status.OK).entity(hello).build();
}
@GET
@Path("/{param}")
@ApiOperation(value = "helloReply",
notes = "Returns Hello you! and {param}",
response = String.class)
@RequiresRoles(WRITE)
public Response getMsg(@PathParam("param") String msg) {
String output = "Hello you! " + msg;
return Response.status(Response.Status.OK).entity(output).build();
}
}
Dois-je écrire des tests qui confirment que certains (test) les utilisateurs obtiennent une réponse des critères d'évaluation, et certains utilisateurs ne sont pas? Et si oui: comment puis-je écrire ces tests? J'ai essayé quelque chose comme ceci:
import javax.ws.rs.core.Application;
import org.glassfish.jersey.server.ResourceConfig;
import org.junit.Test;
import com.cognite.api.shiro.AbstractShiroTest;
import static org.junit.Assert.assertEquals;
public class AuthenticatedHelloWorldTest extends AbstractShiroTest {
@Override
protected Application configure() {
return new ResourceConfig(AuthenticatedHelloWorldResource.class);
}
@Test
public void testAuthenticatedReadHelloWorld() {
final String hello = target("/authhello").request().get(String.class);
assertEquals("Hello world!", hello);
}
@Test
public void testAuthenticatedWriteHelloWorld() {
final String hello = target("/authhello/test").request().get(String.class);
assertEquals("Hello you! test", hello);
}
}
mais je ne suis pas sûr de savoir comment tester réellement la fonction de la @RequiresRoles
-annotation. J'ai lu Shiro's page on testing, mais je n'ai pas réussi à écrire un test qui échoue (par exemple un test pour un sujet qui n'a pas le rôle WRITE
essayant d'accéder à /authhello/test
). Des conseils seraient appréciés.
Merci d'avoir pris le temps de répondre. Après quelques recherches sérieuses et de la lecture, je compris que j'étais, comme vous l'avez dit, manquant un code de configuration. J'ai réussi à reproduire la configuration effectuée dans l'application dans mon test (bien que je ne suis malheureusement pas en mesure de partager un exemple ici). – L42