Class LimiterExtension

java.lang.Object
dev.relism.flash.ext.limiter.LimiterExtension
All Implemented Interfaces:
FlashExtension

public final class LimiterExtension extends Object implements FlashExtension
Rate-limiting extension for Flash.

At provide(dev.relism.flash.extension.FlashContext):

  1. Creates a single BucketStore shared by all rules in this extension instance.
  2. Provides a Guard in the FlashContext for manual use on lambda routes.
  3. Registers an AnnotationProcessor for Limit: reads the annotation once per handler class at boot, resolves the key lambda fail-fast, then returns a pre-compiled middleware — zero map lookups at request time.

Annotation-based (class handlers)


 @Limit(requests = 100, window = 1)                          // 100 req/s per IP
 public class SearchHandler extends RequestHandler { ... }

 @Limit(key = "auth_user", requests = 20, window = 1,
        windowUnit = TimeUnit.MINUTES,
        strategy   = LimitStrategy.TOKEN_BUCKET)
 public class ReportHandler extends RequestHandler { ... }
 

Lambda routes (via Guard)


 app.install(new LimiterExtension(
     new LimiterConfig().registerResolver("auth_user", req -> ClaimsHolder.user().sub())));

 // inside FlashExtension.routes() or after install():
 Guard guard = ctx.require(Guard.class);
 app.get("/api/search", handler, guard.limit("ip", 50, 1, TimeUnit.SECONDS));