Class XadmLoginRateLimitFilter

java.lang.Object
br.com.xadm.comum.seguranca.XadmLoginRateLimitFilter

@Singleton @ServerFilter({"/login/**","/smoke/**"}) @Order(-2147483628) public class XadmLoginRateLimitFilter extends Object
Rate limit COMPARTILHADO dos endpoints públicos que emitem sessão (piso de segurança): no máximo auth.login-rate-limit-per-minute (default 60) tentativas por IP por janela no POST /login/** e no POST /smoke/**. Excedeu → 429 (RFC-7807). Só o POST (a tentativa de auth) é limitado; o GET da página passa.

O /smoke/** entrou com o SmokeSessionController: endpoint que troca token estático por sessão sem freio de brute-force é convite, e a peça já existia — reusar custou um padrão a mais na anotação. O contador é o mesmo (por IP), então o smoke divide a janela com o login do mesmo IP — irrelevante na prática (o smoke faz uma chamada por deploy).

Promovido de integrador-server para xadm-seguranca (spec 007, A2): qualquer app que dependa da lib herda o piso (antes só 1 dos 5 apps tinha freio de brute-force).

Contador em memória por janela fixa, com teto de entradas. Fail-open: qualquer erro ao medir → deixa passar (rate limit nunca derruba o login legítimo). Atrás do Coolify/Traefik o IP real vem do X-Forwarded-For. per-minute <= 0 desliga o filtro.

  • Constructor Details

    • XadmLoginRateLimitFilter

      public XadmLoginRateLimitFilter(AuthSettings settings)
  • Method Details

    • filter

      @RequestFilter @Nullable public @Nullable io.micronaut.http.MutableHttpResponse<?> filter(io.micronaut.http.HttpRequest<?> request)