Una aplicación de demostración que implementa autenticación JWT (JSON Web Token) usando Spring Boot, Spring Security y MySQL.
- ✅ Registro de usuarios
- ✅ Autenticación con JWT
- ✅ Protección de endpoints con Spring Security
- ✅ Base de datos MySQL
- ✅ Encriptación de contraseñas con BCrypt
- ✅ Arquitectura REST API
- ✅ Manejo de roles de usuario
- Spring Boot 3.5.3 - Framework principal
- Spring Security - Seguridad y autenticación
- Spring Data JPA - Persistencia de datos
- JWT (JSON Web Token) - Autenticación sin estado
- MySQL - Base de datos
- Lombok - Reducción de código boilerplate
- Maven - Gestión de dependencias
- Java 17 o superior
- MySQL 8.0 o superior
- Maven 3.6 o superior
git clone https://github.com/tu-usuario/demo-jwt.git
cd demo-jwt- Crear una base de datos MySQL:
CREATE DATABASE securitydb;- Configurar las credenciales en
src/main/resources/application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/securitydb?useSSL=false&serverTimezone=UTC
spring.datasource.username=tu_usuario
spring.datasource.password=tu_contraseñamvn clean installmvn spring-boot:runLa aplicación estará disponible en http://localhost:8080
POST /auth/register
Content-Type: application/json
{
"firstname": "Juan",
"lastname": "Pérez",
"email": "juan@ejemplo.com",
"password": "password123"
}Respuesta:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}POST /auth/login
Content-Type: application/json
{
"email": "juan@ejemplo.com",
"password": "password123"
}Respuesta:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}POST /api/demo
Authorization: Bearer {token}Respuesta:
Demo publico desde endpoint
src/main/java/mik3/demo_jwt/
├── Auth/ # Controladores y servicios de autenticación
│ ├── AuthController.java # Endpoints de login y registro
│ ├── AuthService.java # Lógica de negocio de autenticación
│ ├── AuthResponse.java # DTO de respuesta
│ ├── LoginRequest.java # DTO de petición de login
│ └── RegisterRequest.java # DTO de petición de registro
├── Config/ # Configuraciones de seguridad
│ ├── ApplicationConfig.java # Configuración de beans
│ └── SecurityConfig.java # Configuración de Spring Security
├── Demo/ # Controladores de demo
│ └── DemoController.java # Endpoints de ejemplo
├── Jwt/ # Servicios JWT
│ ├── JwtAuthenticationFilter.java # Filtro de autenticación
│ └── JwtService.java # Servicio de manejo de tokens
├── User/ # Entidades de usuario
│ ├── User.java # Entidad usuario
│ ├── Role.java # Enum de roles
│ └── UserRepository.java # Repositorio de usuarios
└── DemoJwtApplication.java # Clase principal
- Encriptación de contraseñas: BCrypt
- Tokens JWT: Firmados con algoritmo HS256
- Filtros de seguridad: Autenticación automática por token
- Roles: Sistema de autorización basado en roles
- Registrar un usuario usando el endpoint
/auth/register - Obtener el token del response
- Usar el token en el header
Authorization: Bearer {token}para endpoints protegidos
- Verificar que MySQL esté ejecutándose
- Comprobar las credenciales en
application.properties - Asegurar que la base de datos
securitydbexiste
- Los tokens JWT tienen un tiempo de expiración configurado
- Realizar login nuevamente para obtener un nuevo token
Este proyecto está bajo la Licencia MIT - ver el archivo LICENSE.md para detalles.
Mik3 - GitHub