RateLimitService

@Service
class RateLimitService(tenantRepository: TenantRepository, redisProxyManager: LettuceBasedProxyManager<String>, cacheManager: CacheManager, rateLimitProperties: RateLimitProperties)(source)

Serviço de Rate Limiting distribuído usando Token Bucket.

Algoritmo: Token Bucket com "refillGreedy" (recarga contínua).

  • O "balde" enche continuamente com tokens

  • Permite "bursts" de requisições legítimas (ex: carregar dashboard)

  • Se o balde esvaziar, limita à taxa de recarga

Estado: Armazenado no Redis para funcionar em cluster.

Constructors

Link copied to clipboard
constructor(tenantRepository: TenantRepository, redisProxyManager: LettuceBasedProxyManager<String>, cacheManager: CacheManager, rateLimitProperties: RateLimitProperties)

Functions

Link copied to clipboard
fun resetBucket(tenantId: String)

Remove o bucket de um tenant (útil para testes ou reset manual).

Link copied to clipboard
fun resolveBucket(tenantId: String): Bucket

Resolve o bucket de rate limit para um tenant autenticado. A capacidade varia conforme o plano do tenant (FREE/PRO/ENTERPRISE).

Link copied to clipboard
fun resolveBucketByIp(ip: String): Bucket

Resolve o bucket de rate limit para usuários anônimos (por IP). Usado para proteção de endpoints públicos (login, onboarding).