Skip to content

Sistema de Autenticación JWT Empresarial - Spring Boot 3.5.3 | Arquitectura REST segura con Spring Security, MySQL, encriptación BCrypt y manejo de tokens.

Notifications You must be signed in to change notification settings

Mik318/spring-boot-jwt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Demo JWT Authentication - Spring Boot

Spring Boot Java MySQL JWT

Una aplicación de demostración que implementa autenticación JWT (JSON Web Token) usando Spring Boot, Spring Security y MySQL.

📋 Características

  • ✅ 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

🛠️ Tecnologías

  • 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

🚀 Instalación y Configuración

Prerrequisitos

  • Java 17 o superior
  • MySQL 8.0 o superior
  • Maven 3.6 o superior

1. Clonar el repositorio

git clone https://github.com/tu-usuario/demo-jwt.git
cd demo-jwt

2. Configurar la base de datos

  1. Crear una base de datos MySQL:
CREATE DATABASE securitydb;
  1. 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ña

3. Instalar dependencias

mvn clean install

4. Ejecutar la aplicación

mvn spring-boot:run

La aplicación estará disponible en http://localhost:8080

📡 Endpoints de la API

Autenticación

Registro de usuario

POST /auth/register
Content-Type: application/json

{
    "firstname": "Juan",
    "lastname": "Pérez",
    "email": "juan@ejemplo.com",
    "password": "password123"
}

Respuesta:

{
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

Iniciar sesión

POST /auth/login
Content-Type: application/json

{
    "email": "juan@ejemplo.com",
    "password": "password123"
}

Respuesta:

{
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

Endpoints protegidos

Demo endpoint

POST /api/demo
Authorization: Bearer {token}

Respuesta:

Demo publico desde endpoint

🏗️ Arquitectura del Proyecto

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

🔐 Seguridad

  • 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

📝 Uso con Postman

  1. Registrar un usuario usando el endpoint /auth/register
  2. Obtener el token del response
  3. Usar el token en el header Authorization: Bearer {token} para endpoints protegidos

🐛 Troubleshooting

Error de conexión a MySQL

  • Verificar que MySQL esté ejecutándose
  • Comprobar las credenciales en application.properties
  • Asegurar que la base de datos securitydb existe

Token expirado

  • Los tokens JWT tienen un tiempo de expiración configurado
  • Realizar login nuevamente para obtener un nuevo token

📄 Licencia

Este proyecto está bajo la Licencia MIT - ver el archivo LICENSE.md para detalles.

👨‍💻 Autor

Mik3 - GitHub

About

Sistema de Autenticación JWT Empresarial - Spring Boot 3.5.3 | Arquitectura REST segura con Spring Security, MySQL, encriptación BCrypt y manejo de tokens.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages