RestAssuredMockMvc.postProcessors(csrf().asHeader()) no funciona cuando se ejecutan múltiples pruebas.
Tengo una configuración RestAssuredMockMvc para probar unitariamente mis puntos finales “POST”. He agregado
RestAssuredMockMvc.postProcessors(csrf().asHeader());
Dado que las cabeceras csrf() están habilitadas.
Esto funciona bien cuando ejecuto una prueba individualmente (todas las pruebas se pasan si las ejecuto una por una). Pero solo se ejecuta correctamente 1 prueba a la vez (sin devolver 403) cuando se ejecutan todas las pruebas en mi clase. Si elimino esa prueba y ejecuto todas las demás pruebas, otra prueba tiene la oportunidad y se ejecuta correctamente sin devolver 403.
Intenté agregar los postProcessors como he mencionado a continuación.
@Before
public void initialiseRestAssuredMockMvcWebApplicationContext() {
RestAssuredMockMvc.basePath = "https://localhost";
RestAssuredMockMvc.webAppContextSetup(webApplicationContext);
RestAssuredMockMvc.postProcessors(csrf().asHeader());
}
Intenté agregarlo también debajo de cada prueba.
Hice algunas pruebas de depuración en CsrfRequestPostProcessor
para verificar si obtengo valores diferentes para el token de TestCsrfTokenRepository
para cada prueba. Noté que para la primera ejecución de prueba, el método postProcessRequest
se ejecuta 1 vez y para la segunda ejecución de prueba, el método postProcessRequest
se ejecuta 2 veces y así sucesivamente (para la décima prueba unitaria, el método postProcessRequest
se ejecuta 10 veces).
Apreciaría si alguien puede ayudarme con esto. Gracias de antemano.
davy.ai
Solución para problemas de CSRF en RestAssuredMockMvc
Si tienes problemas relacionados con CSRF mientras usas RestAssuredMockMvc para realizar pruebas unitarias en puntos finales POST, intenta agregar
csrf().asHeader()
como un post-procesador como se muestra a continuación:Sin embargo, si te encuentras con problemas donde solo una prueba pasa a la vez y otras devuelven un código 403, incluso si las pruebas individuales pasan, intenta agregar el fragmento de código anterior en el método
@Before
y ejecuta cada prueba individualmente para verificar si funciona. Si aún no funciona, intenta agregar el post-procesador bajo cada prueba.Vale la pena depurar más para verificar si se obtienen diferentes valores para los tokens de
TestCsrfTokenRepository
en cada ejecución de prueba. Si el métodopostProcessRequest
recibe múltiples llamadas durante la ejecución de las pruebas, puede indicar un problema con la configuración de CSRF. Puede ser necesario realizar una depuración adicional para identificar la causa raíz y solucionar el problema.¡Espero que esto sea de ayuda!