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

Deja una respuesta

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