docsConfiguración

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

    • dev: 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:

  1. Crear una base de datos
  2. Configurar las credenciales en el archivo .env
  3. 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:

  1. Variables de Entorno: Los valores con formato ${VARIABLE} se obtienen del archivo .env
  2. 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 a create 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