Ya no busques más por internet ya que has llegado al espacio correcto, tenemos la solución que necesitas pero sin liarte.
Solución:
De la documentación de Spring Security
La protección CSRF está habilitada de forma predeterminada con la configuración de Java. Si desea deshabilitar CSRF, la configuración de Java correspondiente se puede ver a continuación. Consulte el Javadoc de csrf() para obtener personalizaciones adicionales sobre cómo se configura la protección CSRF.
Y, cuando la protección CSRF está habilitada
El último paso es asegurarse de incluir el token CSRF en todos los métodos PATCH, POST, PUT y DELETE.
En tu caso:
- tiene la protección CSRF habilitada de forma predeterminada (porque está utilizando la configuración de Java),
- está enviando el formulario de inicio de sesión mediante HTTP POST y
- no incluyen el token CSRF en el formulario de inicio de sesión. Por este motivo, su solicitud de inicio de sesión se deniega al enviarla porque el filtro de protección CSRF no puede encontrar el token CSRF en la solicitud entrante.
Ya ha determinado las posibles soluciones:
- Deshabilitar la protección CSRF como
http.csrf().disable()
; o - Incluya el token CSRF en el formulario de inicio de sesión como un parámetro oculto.
Dado que está utilizando Thymeleaf, deberá hacer algo como lo siguiente en su plantilla HTML para la página de inicio de sesión:
Tenga en cuenta que debe utilizar th:action
y no HTML action
ya que el procesador Thymeleaf CSRF solo se activará con el primero.
Puede cambiar el método de envío del formulario a GET
solo para superar el problema, pero eso no se recomienda ya que los usuarios enviarán información confidencial en el formulario.
Por lo general, creo un fragmento de Thymeleaf que luego se usa en todas las páginas con formularios para generar el marcado para los formularios con el token CSRF incluido. Esto reduce el código repetitivo en toda la aplicación.
Utilizando @EnableWebMvcSecurity
en vez de @EnableWebSecurity
para habilitar la inyección automática de token CSRF con etiquetas Thymeleaf. También usa