- Java 21: Versión LTS .
- Spring Boot 3.4.0: Módulos Web, Data JPA, Security y Validation.
- MySQL: Base de datos relacional.
- DBeaver: Cliente para la conexión a la base de datos durante el desarrollo.
- OpenAPI / Swagger: Documentación y pruebas de los endpoints.
He aplicado buenas prácticas manteniendo una arquitectura sencilla y funcional:
- Configuración: Uso de
application.ymlpor ser un estándar más limpio y estructurado en la industria frente a los archivos properties. - Uso de DTOs: Utilización de DTOs. La entidad
Userno se devuelve directamente, para que la contraseña no se expongan. - Manejo de Errores: Control de errores en
GlobalExceptionHandler(@RestControllerAdvice). Captura de todos los errores de la aplicación
Medidas de seguridad implementadas para cumplir con los requisitos técnicos:
- Identificadores UUID: El
ides un UUID. Esto previene ataques de enumeración y oculta el volumen total de usuarios registrados. - Encriptación: Contraseñas encriptadas antes de guardarse en la base de datos.
- Gestión del Token: El
tokenytokenExpirationse guardan en base de datos. El filtroTokenAuthenticationFilterintercepta las peticiones, extrae el token y valída en base de datos su existencia y caducidad.
- Ejecuta el script
src/main/resources/nethits_db.sqlen tu servidor MySQL para crear la base de datos y la tabla. - Configura las variables de entorno definidas en el
application.yml:${DB_URL},${DB_USER}y${DB_PASS}para conectar con tu base de datos local.
DB_URL=jdbc:mysql://localhost:3306/nethits?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
DB_USER=nethits_user
DB_PASS=thunder-ivory-canyon-mist-horizon-copper-voyage-sapphire-echo-prairie-cinder-aurora-quartz-river-summit-dusk
- Arranca el contenedor docker en caso de no disponer de base de datos.
- Arrancar la aplicación con
mvn clean spring-boot:run