Ho una configurazione operativa spring-security
che avvolge i miei endpoint REST basati su jersey e consente l'accesso a livello di metodo.Come configurare JerseyTest con sicurezza di primavera?
progetto di esempio con tutto il necessario per riprodurre il problema in modo rapido: https://github.com/pulkitsinghal/dummy-rest-api
// Server-Side jersey resource
@GET
@Path("/protected/myendpoint/")
@PreAuthorize("hasRole('DUMMY')")
public String getMyEndpoint(){
return "blah";
}
Ma quando si scrivono i test di integrità per l'endpoint protetti, mi sono imbattuto nel seguente eccezione che si verifica solo nel reparto Prove :
Caused by:
org.springframework.security.authentication.AuthenticationCredentialsNotFoundException:
An Authentication object was not found in the SecurityContext
Ecco ciò che la classe unit test basato JerseyTest assomiglia:
@Test
public void testProtectedEndpoint() {
WebResource webResource = resource();
webResource.addFilter(new HTTPBasicAuthFilter("username", "password"));
String responseMsg = webResource
.path("protected/myendpoint/")
.get(String.class);
System.out.println(responseMsg);
}
Qualcun altro si è imbattuto in questo problema durante l'installazione di un JerseyTest
per un endpoint protetto con sicurezza a molla? Cosa si può fare al riguardo?
Ho una connessione remota qui: Spring Test & Security: How to mock authentication? ma non sono a un livello in cui potrei fare testa o croce su cosa sta succedendo in quel thread. Pensieri?
È possibile pubblicare la traccia dello stack completo dell'eccezione e la configurazione di Spring Security? Inoltre, quali versioni di Spring, Spring Security e Jersey stai usando? –
Aggiunto un progetto di esempio funzionante che dimostra il problema quando viene eseguito il test dell'unità, qui: https://github.com/pulkitsinghal/dummy-rest-api – pulkitsinghal
È questo tipo di test unitario, qualcosa su cui semplicemente non funzionerà 'GrizzlyWebTestContainerFactory', non importa quale? – pulkitsinghal