es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , , ,

Answer

  1. Avatar for 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:

    RestAssuredMockMvc.postProcessors(csrf().asHeader());
    

    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étodo postProcessRequest 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!

Comments are closed.