Class SmokeReadOnlyFilter
SessionAuthenticationFetcher.ROLE_SMOKE só pode usar métodos seguros
(GET/HEAD/OPTIONS); qualquer escrita vira 403 em RFC-7807.
Por que um filtro, e não um papel separado: o smoke precisa navegar as rotas logadas —
é o que ele testa —, então o principal tem de carregar o ROLE_VIEW que as regras de view
dos apps exigem. Com o ROLE_VIEW vem, de graça, o poder de escrever. O corte por método
devolve a fronteira sem obrigar cada app a reescrever suas regras de segurança.
⚠️ A garantia é por VERBO, não por efeito. O filtro assegura "não escreve por método
HTTP" — não "não causa efeito". Um @Get que dispara job, exporta gravando ou incrementa
contador passa por ele inteiro. Como o smoke só faz GET, isto é defesa em profundidade
sobre um cliente que já é de leitura; não leia como "o smoke não pode causar efeito nenhum". Ver a
norma do central (engenharia/smoke-producao §4).
Roda depois da fase de segurança (ServerFilterPhase.SECURITY) — antes dela o
SessionAuthenticationFetcher ainda não populou a Authentication e o filtro não
veria papel nenhum. Nasce desligado junto do SmokeSessionController: sem
smoke.token não existe sessão de smoke a limitar, e o filtro não sobe.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription@Nullable io.micronaut.http.MutableHttpResponse<?> filter(io.micronaut.http.HttpRequest<?> request) Recusa escrita vinda de uma sessão de smoke.
-
Constructor Details
-
SmokeReadOnlyFilter
public SmokeReadOnlyFilter()Construtor padrão.
-
-
Method Details
-
filter
@RequestFilter @Nullable public @Nullable io.micronaut.http.MutableHttpResponse<?> filter(io.micronaut.http.HttpRequest<?> request) Recusa escrita vinda de uma sessão de smoke.- Parameters:
request- a requisição.- Returns:
nullpara seguir o pipeline, ou a resposta403quando é escrita de smoke.
-