00.75.00
Release date: 2026-06-24 Previous release: 00.74.20 Maven coordinates (parent):
com.svenruppert.jsentinel:jSentinel-parent:00.75.00Full changelog: GitHub release v00.75.00
The bus is a signed event backbone with Ed25519 signatures, replay protection, per-producer/tenant sequencing, producer policy, persistent stores and a REST/SSE bridge for external consumers. It does not replace audit — audit becomes a consumer that sits on top of the bus.
Headline — a signed event in four lines
var bus = new DefaultJSentinelEventBus(publishPipeline);
bus.subscribe(SessionRevokedEvent.class, e -> invalidate(e.sessionId()));
bus.publish(new LoginSucceededEvent(meta, "password")); // signed + dispatched
// remote consumer:
JSentinelEventVerificationResult r = consumePipeline.verify(envelope, Instant.now());Five themes
- Typed, signed security events — ~34 concrete
JSentinelEventrecords across authentication, authorization, session, role, token, device, rate-limit and bus-integrity categories, each wrapped in aSignedJSentinelEventEnvelope. - Integrity end-to-end — the signature binds the envelope metadata (tenant, type, expiry, producer, sequence, key id, payload hash); nothing can be tampered without invalidating it. Verification yields a sealed, differentiated result.
- Replay + ordering — mandatory replay protection and monotone per-
(tenant, producer)sequencing with a configurable violation strategy. - Distribution — a REST/SSE bridge lets a Vaadin app observe a REST service’s security events in near real time, with
Last-Event-IDresume. - Pluggability — seven SPIs (signature, payload codec, key management, replay, sequence, producer policy, event/dead-letter store) with in-memory defaults and Eclipse-Store-backed, restart-safe persistence.
New modules
| Module | Purpose |
|---|---|
jSentinel-events | SPI core: event model + signed envelope, signature SPI (Ed25519 default, ECDSA fallback), canonical-JSON payload codec, key management, replay / sequence / producer / store SPIs, the EventBus + publish/consume pipelines, audit-subscriber + feature flag. No Vaadin / REST / Eclipse-Store dependency. |
jSentinel-events-rest | REST/SSE bridge: GET /api/events/stream (replay-from-cursor + live tail), POST /api/events (permission-gated publish), envelope wire codec. |
jSentinel-events-testkit | @Test default contract suites for all seven SPIs + shared fixtures. |
jSentinel-events-persistence-eclipsestore | JVM-restart-safe Eclipse-Store-backed replay / sequence / envelope / dead-letter stores. |
All new public types carry @ExperimentalJSentinelApi; stable-API promotion
is staged for a later release after demo adoption. The canonical-JSON codec
keeps the module dependency-free — Jackson / Gson / org.json are
Maven-Enforcer-banned on jSentinel-events.
What it does not do
No transport encryption for SSE (delegated to HTTPS / mTLS); no Kafka / RabbitMQ / Pulsar / NATS replacement; no SIEM / HSM / Cloud-KMS; no tamper-evident audit (kept for the 00.80 line).
Quality
| Module | Mutation | Line | Notes |
|---|---|---|---|
jSentinel-events | 86 % (356/416) | 88 % | New SPI-core module; publish/consume pipelines + verification result fully exercised. |
jSentinel-events-rest | profile | — | Real HttpServer + HttpClient integration suite. |
jSentinel-events-testkit | n/a | — | Contract suites verified through their consumers. |
jSentinel-events-persistence-eclipsestore | profile | — | Verified via testkit contracts + a close/reopen restart test. |
Every pre-existing module keeps its 00.74 mutation baseline by construction — 00.75 changes no existing source. Test discipline unchanged: no mocks.
Migration
None. The bus is opt-in and feature-flagged (jsentinel.events.bus.enabled,
default off); apps that don’t wire it pay nothing. Just bump the version to
00.75.00.