Skip to content
Flag of Europe
Made in the European Union · Independently built · Released under EUPL 1.2

00.75.00

Available on Maven Central. The Security Event Bus: a signed-envelope event system that the rest of jSentinel can publish to and observe. Purely additive — four new modules, no existing source changed, so every 00.71–00.74 app compiles and boots identically; no migration. Since hardened by 00.75.10 and 00.75.20; the current release is 00.79.41.

Release date: 2026-06-24 Previous release: 00.74.20 Maven coordinates (parent): com.svenruppert.jsentinel:jSentinel-parent:00.75.00 Full 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

  1. Typed, signed security events — ~34 concrete JSentinelEvent records across authentication, authorization, session, role, token, device, rate-limit and bus-integrity categories, each wrapped in a SignedJSentinelEventEnvelope.
  2. 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.
  3. Replay + ordering — mandatory replay protection and monotone per-(tenant, producer) sequencing with a configurable violation strategy.
  4. Distribution — a REST/SSE bridge lets a Vaadin app observe a REST service’s security events in near real time, with Last-Event-ID resume.
  5. 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

ModulePurpose
jSentinel-eventsSPI 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-restREST/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-eclipsestoreJVM-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

ModuleMutationLineNotes
jSentinel-events86 % (356/416)88 %New SPI-core module; publish/consume pipelines + verification result fully exercised.
jSentinel-events-restprofileReal HttpServer + HttpClient integration suite.
jSentinel-events-testkitn/aContract suites verified through their consumers.
jSentinel-events-persistence-eclipsestoreprofileVerified 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.