Package dev.relism.flash.ext.limiter
Class LimiterExtension
java.lang.Object
dev.relism.flash.ext.limiter.LimiterExtension
- All Implemented Interfaces:
FlashExtension
Rate-limiting extension for Flash.
At provide(dev.relism.flash.extension.FlashContext):
- Creates a single
BucketStoreshared by all rules in this extension instance. - Provides a
Guardin theFlashContextfor manual use on lambda routes. - Registers an
AnnotationProcessorforLimit: 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));
-
Constructor Summary
ConstructorsConstructorDescriptionInstalls with default config (only the built-in"ip"resolver).LimiterExtension(LimiterConfig config) Installs with a customLimiterConfig(custom resolvers, etc.). -
Method Summary
Modifier and TypeMethodDescriptionintpriority()Rate limiting runs before authentication — cheaper check rejects over-limit requests before any token validation occurs.voidprovide(FlashContext ctx) Phase 1 — register services and processors.voidroutes(FlashRegistrar<?> app, FlashContext ctx) Phase 2 — register routes.
-
Constructor Details
-
LimiterExtension
public LimiterExtension()Installs with default config (only the built-in"ip"resolver). -
LimiterExtension
Installs with a customLimiterConfig(custom resolvers, etc.).
-
-
Method Details
-
priority
public int priority()Rate limiting runs before authentication — cheaper check rejects over-limit requests before any token validation occurs.- Specified by:
priorityin interfaceFlashExtension
-
provide
Description copied from interface:FlashExtensionPhase 1 — register services and processors. Safe:FlashContext.provide(java.lang.Class<T>, T),FlashContext.supply(java.lang.Class<T>, java.util.function.Supplier<T>),FlashContext.addAnnotationProcessor(dev.relism.flash.extension.AnnotationProcessor),FlashContext.addRouteListener(dev.relism.flash.extension.RouteListener). Unsafe:FlashContext.require(java.lang.Class<T>)(services not yet resolved).- Specified by:
providein interfaceFlashExtension
-
routes
Description copied from interface:FlashExtensionPhase 2 — register routes. All services are fully resolved.FlashContext.require(java.lang.Class<T>)is safe here.- Specified by:
routesin interfaceFlashExtension
-