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/** do SmokeSessionController entra porque troca token estático por sessão, e sem freio de brute-force isso é convite. O contador é o mesmo (por IP): o smoke divide a janela com o login do mesmo IP, o que é irrelevante na prática (uma chamada por deploy).

Qualquer app que dependa da lib herda o piso 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)