Volver al Portfolio
LIVE LABS • SIMULADOR INTERACTIVO

Java Open Source Playground

Carlos Expósito • Perito Colegiado Nº 03624

Prueba las librerías en acción directamente en tu navegador

Simulador interactivo en tiempo real que ejecuta en JavaScript los mismos algoritmos (Luhn, Merkle Trees, SHA-256 criptográfico, carrier pinning y circuitos CAS) de la suite de librerías Java empresariales. Cada sección incluye una explicación técnica de qué hace y cómo funciona.

AgentGuard: AI Prompt Firewall & Reversible PII Masking

Anonimiza datos sensibles con validación Luhn y bloquea prompt injections antes de enviar el prompt a LLMs (Spring AI / LangChain4j).

¿Qué hace esta herramienta y qué problema resuelve?

El problema: Al conectar microservicios Java con modelos LLM externos (OpenAI, Claude, etc.), corres el riesgo de enviar datos sensibles de tus clientes (RGPD) o sufrir ataques de Prompt Injection que manipulen el comportamiento del asistente.

1. Validación de Tarjetas (Fórmula de Luhn): No enmascara cualquier número de 16 cifras (evitando dañar números de seguimiento o códigos de barras). Solo enmascara si pasa la validación matemática ISO/IEC 7812.
2. Enmascaramiento Bidireccional Reversible: Sustituye emails, tarjetas o DNIs por tokens como [EMAIL_1]. Al recibir la respuesta del LLM, AgentGuard restaura los datos originales para el usuario final sin que el proveedor de IA los haya visto jamás.
3. Firewall contra Prompt Injection: Analiza el texto detectando intentos de fuga de instrucciones del sistema, personajes tipo DAN o falsificación de delimitadores (<|im_start|>).
4. Aspecto Declarativo @SecurePrompt: En Spring Boot se aplica con una simple anotación sobre tus métodos de servicio, automatizando el proceso sin cambiar tu lógica de negocio.
Prueba estos ejemplos preparados:
1 Prompt Original (Entrada del Usuario)

Escribe un texto con datos personales reales o ficticios, o un ataque de inyección, y haz clic en procesar.

Tokens estimados: ~38
2 Diagnóstico de Seguridad del Firewall

Muestra si el prompt es seguro para enviarse al LLM o si contiene comandos maliciosos que vulneren el sistema.

PROMPT SEGURO (SAFE)
Riesgo de Injection:
NONE (0/100)
Ninguna amenaza de inyección detectada.
3 Prompt Sanitizado (Lo que realmente se envía al LLM)

Observa cómo los datos privados han sido sustituidos por tokens artificiales protegidos.

Por favor cobra 150 EUR a la tarjeta Visa [CREDIT_CARD_1] y envía recibo a [EMAIL_1] para el DNI [TAX_ID_1] con teléfono [PHONE_1].
Tabla de Mapeo en Memoria (PiiContext):
[CREDIT_CARD_1] ➔ 4532-0150-1234-5671 (Luhn OK) [EMAIL_1] ➔ cliente.vip@empresa.com [TAX_ID_1] ➔ 12345678Z [PHONE_1] ➔ +34 612 345 678
4 Desanonimización de la Respuesta

El LLM responde haciendo referencia a los tokens recibidos. Al restaurar, se devuelven los datos al usuario final sin riesgo de filtración.

Pago procesado con 4532-0150-1234-5671. Justificante remitido a cliente.vip@empresa.com.

EvidenceChain: Cryptographic Audit Trail & Merkle Forensics

Libro mayor inmutable con árboles de Merkle y SHA-256. Diseñado bajo metodología pericial judicial (Colegiado Nº 03624) para garantizar la no manipulación de evidencias digitales.

¿Qué hace esta herramienta y qué problema resuelve?

El problema: En auditorías de seguridad, procesos penales o transacciones bancarias, las bases de datos tradicionales pueden ser alteradas por administradores o atacantes sin dejar rastro ("nadie vigila al vigilante").

1. Hashing Criptográfico SHA-256: Cada evento registrado genera un hash irreversible basado en sus datos y sellado temporal.
2. Árbol de Merkle (Merkle Tree): Los hashes se combinan en parejas hasta calcular la Merkle Root. Permite demostrar la autenticidad e inclusión de cualquier registro en tiempo logarítmico $O(\log N)$.
3. Detección Inmediata de Fraude: Haz clic en "Simular Alteración Fraudulenta": cambiar una sola letra de un registro altera su hash individual y rompe de inmediato la raíz de Merkle, tiñendo el árbol de rojo y alertando de la falsificación.
4. Validez Legal y Dictamen Forense: Diseñado bajo la norma ISO/IEC 27037 (conservación de la cadena de custodia probatoria) y listo para ser presentado como prueba válida en juicios.
1 Cadena de Evidencias Digitales Registradas

Cada registro posee una huella digital SHA-256 inmutable. Si alguien altera un registro pasado en la base de datos, el árbol criptográfico detectará la ruptura al instante.

2 Árbol Criptográfico de Merkle (SHA-256)
CADENA ÍNTEGRA Y VÁLIDA

Visualización de los nodos del árbol. La raíz superior (Merkle Root) es la firma única que resume criptográficamente todo el estado del sistema.

MERKLE ROOT HASH: Calculando hash criptográfico SHA-256...

LoomDoctor: Virtual Thread Pinning & Pool Starvation Telemetry

Diagnóstico en vivo del comportamiento de hilos virtuales (Java 21+) sobre carrier threads y saturación de pools JDBC.

¿Qué hace esta herramienta y qué problema resuelve?

El problema: En Java 21+, los hilos virtuales (Project Loom) permiten manejar millones de peticiones ligeras, pero introducen dos fallos silenciosos muy graves en producción:

1. Carrier Thread Pinning: Si un hilo virtual ejecuta una operación de red o base de datos dentro de un bloque synchronized, queda "anclado" al hilo físico de la CPU (*carrier thread*). Si tienes 8 núcleos de CPU y 8 hilos quedan anclados, tu servidor se congela por completo.
2. Inanición de Connection Pools (Starvation): Es facilísimo lanzar 5.000 hilos virtuales en milisegundos. Si tu base de datos tiene un pool de solo 10 conexiones (HikariCP), 4.990 hilos se acumularán en cola provocando timeouts masivos en cascada.
3. Diagnóstico en Vivo y Actuator: LoomDoctor captura los incidentes en un buffer circular en memoria (sin riesgo de OutOfMemory) y expone el estado de salud y consejos de refactor en /actuator/loom-doctor.
4. Solución Recomendada: Sustituir synchronized por java.util.concurrent.locks.ReentrantLock para permitir que el hilo virtual ceda la CPU limpiamente, y aplicar Semaphore para acotar la concurrencia downstream.
1 Parámetros de Carga Concurrente

Ajusta los deslizadores para simular distintas condiciones de tráfico y concurrencia:

2 Telemetría de Runtime (/actuator/loom-doctor)
STATUS: DEGRADED

Métricas calculadas por LoomDoctor a partir de los eventos del runtime de Java 21:

Saturación de Carrier Threads (CPUs)
8 / 8 Pinned (100%) Si llega al 100%, ningún otro hilo virtual puede avanzar en esas CPUs.
Ratio de Inanición de Conexiones JDBC
Ratio 99.0x (990 en cola) Un ratio superior a 2.0x indica colapso inminente por espera en base de datos.
Dictamen y Consejos de Reingeniería Generados:
  • Carrier Thread Pinning Detectado: 8 hilos portadores bloqueados dentro de monitores synchronized. Sustituye por java.util.concurrent.locks.ReentrantLock.
  • Downstream Starvation: 990 hilos virtuales esperando por 10 conexiones JDBC. Implementa backpressure con Semaphore o amplía el pool.

Fuse: Ultra-lightweight Lock-Free Circuit Breaker

Circuit breaker en menos de 20 KB sin dependencias externas, con operaciones atómicas CAS (AtomicReference) para microservicios de ultra baja latencia.

¿Qué hace esta herramienta y qué problema resuelve?

El problema: Cuando un microservicio downstream o base de datos falla, seguir enviando peticiones congestiona los hilos, agota sockets y provoca caídas en cascada en toda la arquitectura.

1. Estado CLOSED (Normal): Las llamadas pasan al microservicio. Si el porcentaje de fallos supera el umbral configurado (ej. 50%), salta de inmediato a OPEN.
2. Estado OPEN (Fast-Fail): El circuito corta el paso. Cualquier petición entrante es rechazada al instante en 0.1ms sin intentar contactar al servicio caído, protegiendo los recursos.
3. Estado HALF-OPEN (Sondeo): Tras un tiempo de enfriamiento, deja pasar una petición de prueba para verificar si el microservicio se ha recuperado.
4. Concurrencia Lock-Free: A diferencia de Resilience4j o Hystrix, Fuse pesa menos de 20 KB y no usa bloqueos pesados ni hilos de fondo; utiliza operaciones atómicas de CPU (CAS).
1 Generador de Tráfico de Microservicios

Envía peticiones simuladas para comprobar cómo reacciona el Circuit Breaker:

Total Peticiones 0
Peticiones OK 0
Peticiones Falladas 0
Tasa de Error 0%
2 Estado Atómico del Circuito

Transiciones de estado gobernadas por AtomicReference.compareAndSet():

Estado Actual del Circuito:

CLOSED

El tráfico fluye con normalidad. Los microservicios downstream responden adecuadamente.

Log de Transiciones Atómicas CAS:
[0.000s] Circuit initialized in state CLOSED (CAS lock-free)