Contenido del curso
Configuración de seguridad
- 5

Configuración de Seguridad con Spring Security y Basic Authentication
06:32 min - 6

Cómo funciona el BasicAuthenticationFilter por dentro
11:50 min - 7

Deshabilitar CSRF en Spring Security con JWT
07:28 min - 8

Configuración global de CORS en Spring
12:11 min - 9

Configuración de Reglas de Acceso en Spring Security
07:45 min - 10

Creación de usuarios personalizados en Spring Security
07:06 min - 11

Creación y Gestión de Roles y Permisos en Aplicaciones Web
05:48 min
Autenticación con BD
Seguridad con JWT
Próximos pasos
Auditar usuarios con Spring Security y JPA
Resumen
Auditar quién crea y modifica registros en una base de datos es clave para sistemas seguros y trazables. Con Spring Security combinado con Spring Data JPA, puedes registrar automáticamente el username de cada usuario autenticado que inserta o modifica datos, sumando trazabilidad real a tus entidades.
¿Cómo extender la auditoría de fechas para registrar usuarios?
La entidad PizzaEntity ya cuenta con la anotación @EntityListeners, que apunta a dos listeners: una implementación propia llamada AuditPizzaListener y el AuditingEntityListener que Spring usa por defecto. Este último es el que permite auditar fechas y, ahora, también usuarios.
La clase PizzaEntity extiende de AuditableEntity, donde viven las columnas de auditoría. Para registrar el usuario, necesitas agregar dos atributos nuevos en esa clase base.
¿Qué atributos debes añadir en AuditableEntity?
Los atributos que sumas son simples strings mapeados a columnas específicas con sus respectivas anotaciones de auditoría.
- Atributo
createdByde tipo string, anotado con@Column(name = "created_by")y@CreatedBy. - Atributo
modifiedByde tipo string, anotado con@Column(name = "modified_by")y@LastModifiedBy. - Ambos funcionan en paralelo a los ya existentes
@CreatedDatey@LastModifiedDate.
Con estas anotaciones, Spring sabe en qué columnas debe inyectar el username del usuario que crea o modifica una pizza [02:00].
¿Qué hace la anotación @CreatedBy en Spring Data JPA? Marca el atributo donde Spring guardará automáticamente el username del usuario autenticado al insertar un nuevo registro, sin que tengas que asignarlo manualmente.
¿Cómo implementar AuditorAware para capturar el usuario autenticado?
Para que @CreatedBy y @LastModifiedBy funcionen, Spring necesita saber de dónde sacar el usuario. Eso se resuelve implementando la interfaz AuditorAware<String> en una clase nueva.
Dentro del paquete audit, crea la clase AuditUsername y anótala con @Service para que viva en el contexto de Spring [03:10]. Esta clase implementa AuditorAware<String> y debe sobrescribir el método getCurrentAuditor, que devuelve un Optional<String>.
¿Cómo se obtiene el usuario desde el SecurityContextHolder?
El filtro de seguridad ya guarda la autenticación en el SecurityContextHolder mediante setAuthentication. Aquí haces lo opuesto: la recuperas con getAuthentication.
java Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication == null || !authentication.isAuthenticated()) { return null; }
String username = authentication.getPrincipal().toString(); return Optional.of(username);
La validación de null y isAuthenticated es defensiva. Aunque las reglas de seguridad ya exigen rol de administrador y un JSON Web Token válido para modificar pizzas, conviene blindar la lógica [04:30].
El método getPrincipal devuelve un Object, por eso aplicas toString() para obtener el username como cadena. Ese valor envuelto en Optional.of es lo que Spring usará para llenar las columnas created_by y modified_by.
¿Qué es AuditorAware en Spring Data JPA? Es una interfaz que le dice a Spring cómo identificar al usuario actual. Implementarla permite que
@CreatedByy@LastModifiedByse llenen automáticamente con el username autenticado.
¿Cómo verificar la auditoría de usuarios desde Postman y MySQL?
Una vez integrados los cambios, lanza la aplicación y prueba el flujo completo desde Postman para confirmar que la auditoría funciona.
¿Qué pasos seguir para probar el flujo de auditoría?
El proceso replica un caso real: autenticación, modificación y verificación en base de datos.
- Genera el JSON Web Token con el usuario
adminy contraseñaadmin123. - Copia el token del encabezado
Authorizationde la respuesta. - En la petición de actualizar pizza, cambia el tipo de autorización a Bearer Token y pega el JWT.
- Modifica el body, por ejemplo agregando "sal" y "azúcar" a los ingredientes.
- Lanza la petición y espera una respuesta 200.
Luego, en MySQL ejecuta SELECT * FROM pizzeria.pizza y verás que el registro de pepperoni tiene admin en la columna modified_by [06:15].
¿Por qué con el usuario customer no funciona la modificación?
Las reglas de seguridad restringen las operaciones de modificación al rol de administrador. Si intentas la misma petición con customer, el filtro la rechaza antes de llegar a la lógica de auditoría. Por eso la prueba se hace con admin.
Un buen ejercicio es crear una nueva pizza autenticado como administrador para confirmar cómo se llena la columna created_by al insertar un registro desde cero.
Este enlace entre Spring Data JPA y Spring Security convierte la auditoría en un mecanismo completo: ya no solo sabes cuándo se tocó un registro, sino quién lo hizo. ¿Has aplicado este patrón en alguno de tus proyectos? Cuéntalo en los comentarios.