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=8080
Explicació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 21
Nota:
threads.virtual.enabled
Se 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 PostgreSQL
Nota:
hibernate.ddl-auto: none
significa que Hibernate no modificará el esquema de la base de datos, si es la primera vez que ejecutas la aplicación, cambia acreate
para 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 token
Configuración del Servidor
server:
port: ${PORT:8080} # Puerto del servidor, por defecto 8080
servlet:
context-path: /api # Ruta base de la API
Nota:
context-path
configura 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