Configuración
Variables de Entorno
El proyecto utiliza un archivo .env para la configuración. Crea una copia del archivo .env.example:
# Configuración de la base de datos
SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/jwt-spring-boot
SPRING_DATASOURCE_USERNAME=myuser
SPRING_DATASOURCE_PASSWORD=secret
# Configuración de JWT
JWT_SECRET=tu_clave_secreta
JWT_EXPIRATION_MS=3600000
# Configuración de Spring Boot
PROFILE=dev
PORT=8080Explicación de Variables
Variables de Base de Datos
-
SPRING_DATASOURCE_URL: URL de conexión a PostgreSQL- Formato:
jdbc:postgresql://[host]:[puerto]/[nombre_db] - Ejemplo local:
jdbc:postgresql://localhost:5432/jwt-spring-boot - Ejemplo Docker:
jdbc:postgresql://postgres:5432/jwt-spring-boot
- Formato:
-
SPRING_DATASOURCE_USERNAME: Usuario de la base de datos- Usuario con permisos para crear/modificar tablas
- En desarrollo puede ser ‘postgres’
-
SPRING_DATASOURCE_PASSWORD: Contraseña del usuario de base de datos- Usa contraseñas fuertes en producción
- Mínimo 12 caracteres recomendado
Variables de JWT
JWT_SECRET: Clave secreta para firmar los tokens- Debe ser una cadena segura y larga
- Recomendado: mínimo 256 bits (32 caracteres)
- Ejemplo para generar:
openssl rand -base64 32 - Puedes usar la web: https://jwtsecret.com/generate
Nota: La clave secreta debe mantenerse segura y no debe ser compartida. Si se comparte, cualquiera puede generar tokens y acceder a la aplicación.
JWT_EXPIRATION_MS: Tiempo de vida del token en milisegundos- 3600000 = 1 hora
- 86400000 = 24 horas
- Ajusta según tus necesidades de seguridad
Nota: El tiempo de vida del token debe ser lo más corto posible para minimizar el riesgo de exposición. En general, se recomienda un tiempo de vida de 15 minutos a 1 hora.
JWT_REFRESH_EXPIRATION_MS: Tiempo de vida del refresh token en milisegundos- 86400000 = 24 horas
- Ajusta según tus necesidades de seguridad
Nota: El tiempo de vida del refresh token debe ser mayor que el tiempo de vida del token de acceso. Se recomienda un tiempo de vida de 24 horas o más.
Variables de Configuración Spring
-
PROFILE: Perfil de Spring Boot activodev: Desarrollo (más logs, swagger habilitado)prod: Producción (optimizado, logs mínimos)test: Pruebas (usa H2 en memoria)
-
PORT: Puerto donde se ejecutará la aplicación- Por defecto: 8080
- Asegúrate que el puerto esté libre
- En Docker, este es el puerto interno
Configuración de Base de Datos
La aplicación requiere PostgreSQL 15 o superior. Asegúrate de:
- Crear una base de datos
- Configurar las credenciales en el archivo
.env - La base de datos se migrará automáticamente al iniciar la aplicación
Configuración de Spring Boot (application.yml)
El archivo application.yml contiene la configuración principal de la aplicación. Aquí está explicado por secciones:
Notas Importantes:
- Variables de Entorno: Los valores con formato
${VARIABLE}se obtienen del archivo.env - Valores por Defecto: El formato
${VARIABLE:default}proporciona un valor por defecto si la variable no está definida
Configuración Principal de Spring
spring:
config:
import: optional:file:.env.local[.properties] # Importa variables de entorno desde .env.local
application:
name: jwt-spring-boot # Nombre de la aplicación
profiles:
active: ${PROFILE:dev} # Perfil activo, por defecto 'dev'
threads:
virtual:
enabled: true # Habilita Virtual Threads de Java 21Nota:
threads.virtual.enabledSe utiliza la nueva característica de Java 21 para mejor rendimiento
Configuración de JPA y Base de Datos
spring:
jpa:
database: POSTGRESQL # Tipo de base de datos
show-sql: false # Deshabilita logs SQL
hibernate:
ddl-auto: none # Deshabilita generación automática de esquema
datasource:
url: ${SPRING_DATASOURCE_URL} # URL de conexión desde .env
username: ${SPRING_DATASOURCE_USERNAME} # Usuario desde .env
password: ${SPRING_DATASOURCE_PASSWORD} # Contraseña desde .env
driverClassName: org.postgresql.Driver # Driver PostgreSQLNota:
hibernate.ddl-auto: nonesignifica que Hibernate no modificará el esquema de la base de datos, si es la primera vez que ejecutas la aplicación, cambia acreatepara crear las tablas automáticamente.
Configuración de Seguridad y JWT
spring:
security:
oauth2:
resourceserver:
jwt:
secret-key: ${JWT_SECRET} # Clave secreta para firmar tokens
app:
jwt:
expirationMs: ${JWT_EXPIRATION_MS} # Tiempo de expiración del token
jwtRefreshExpirationMs: ${JWT_REFRESH_EXPIRATION_MS} # Tiempo de expiración del refresh token
issuer: programandoenjava.com # Emisor del tokenConfiguración del Servidor
server:
port: ${PORT:8080} # Puerto del servidor, por defecto 8080
servlet:
context-path: /api # Ruta base de la APINota:
context-pathconfigura todas las rutas de la API comenzarán con/api, por ejemplo:/api/v1/auth/login, si deseas cambiarlo, modifica el valor o elimínalo.
Configuración de la Aplicación
app:
url:
frontend: https://programandoenjava.com # URL del frontend