Autenticación múltiple en Spring boot: JWT y formulario

Escenario

Por exigencias de un tercero debemos adaptar nuestro servicio web para que sea compatible con autenticación por JWT. Hasta ahora las llamadas al API se hacían desde dentro de la aplicación usando las mismas credenciales del usuario autenticado por cookie. La configuración de la cadena de filtros de Spring Security es la siguiente: En teoría bastaba con crear un nueva clase con otro Bean que configurara la cadena de filtros para JWT: Y encabezar las clases con la anotación @Order. A la primera clase —la que incluye la cadena de filtro para login con usuario y contraseña— le asignamos un orden posterior a la segunda clase, por ejemplo @Order(101) y <code>@Order(100). De este modo antes de aplicar el filtro de JWT se comprueba si la cabecera viene con la clave «Authorization», de ser así se aplica el filtro, de lo contrario se aplica el segundo filtro en el que verifica si el usuario está identificado y consta de alguno de los roles especificados.

Problema

«En mi máquina funciona». Clásica excusa… Hasta que lo desplegué en un servidor remoto. Entonces, de manera sistemática, la petición con el token era redirigida a /user/login. Después de un buen rato dando palos de ciego me decido a activar trazas en el jar desplegado en el servidor, añadiendo la siguiente clave en application.properties: logging.level.org.springframework.security.web.FilterChainProxy=DEBUG. Al hacer la petición se registra la siguiente configuración: En cambio, en mi aplicación local, arrancada por Netbeans: Claramente se están aplicando filtros distintos. Parece que en mi máquina se respeta el orden anotado en las clases de configuración, no así en el servidor.

Solución

Gracias a una issue en GitHub, caigo en la cuenta de que, a pesar de lo que haya podido leer en StackOverflow o en algún otro blog, el orden no ha de ser especificado a nivel de la clase, sino del Bean. y

Publicaciones Similares

  • Instalación certificado raíz Comodo

    Escenario Hemos migrado nuestro repositorio de git a un nuevo servidor y tenemos que actualizar las URLs de los orígenes de nuestros repositorios locales. Problema Cambiamos la url remota del repositorio local de git con el comando git remote set-url y, tras hacer un pull git nos devuelve el siguiente error: fatal: unable to access 'https://git.technoage.es/acme.git/': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none Solución Por lo visto nuestra…

  • Oracle JDK 7 is NOT installed.

    Escenario El otro día me avisaron que una de las decenas de webs bajo mi responsabilidad tenía el certificado caducado. A principio de mes estuve actualizando los certificados de todos los servidores, pero éste se me pasó. Problema Al no ser una web a la que demos mucho uso, tenía actualizaciones de seguridad pendientes de…

  • React select async

    Escenario Estoy diseñando un formulario web en el que quiero mostrar un combo que se carga dinámicamente con una petición XHR. Problema Los datos a cargar cuentan con miles de registros. Necesito un combo que se cargue de manera dinámica y disponga de un autocomplete para filtrar los resultos. Solución React select es un módulo…

  • Tablas con nombre reservado en entidades en Spring Boot

    Escenario Tenemos una aplicación corriendo sobre Spring Boot que usa Hibernate como ORM. Una de las tablas se llama Group, se utiliza para almacenar los distintos grupos a los que puede pertenecer un usuario. Problema La entidad de java que representa la tabla de grupos tiene esta pinta:

    Sabía que group es una palabra…

  • La tabla mysql.plugin no existe

    Escenario Después de necesitar restaurar tres veces el servidor de MySql por culpa de varios crashs provocados por un fallo en el disco duro, encuentro en los logs entradas de este tipo: 2020-09-12T18:46:22.347957Z 5 [Warning] InnoDB: Cannot open table mysql/help_relation from the internal data2020-09-12T18:46:22.348985Z 5 [Warning] InnoDB: Cannot open table mysql/innodb_index_stats from the internal data dictionary of InnoDBdictionary Problema En varios foros leo que la solución pasa por hacer un:

    La cuestión es que, cuando lo intento, me encuentro…

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *