0025 — Login servida pela lib¶
Status: Aprovado · Responsável: Gustavo Madruga · Atualizado em: 2026-09-15 · Decidido em: 2026-09-10
Contexto¶
Este RD não decide nada novo: a tela de login servida pela lib é norma da casa (constituição §5, decisão central 0032, constituição 1.4.0). O que faltava aqui era o rastro local — quando e como este app adotou.
A frota tinha cinco login.jte copiados — e o duplicado era o que não deveria: mecanismo de
auth idêntico (mesmo SDK, mesmo popup, mesmo callback com CSRF), moldura divergente. Um bug de auth
custava 5 PRs. A xadm-seguranca passou a servir a view (xadm/login, sob namespace — sem colisão
de FQCN com a view do app) e o app configura marca/tagline/título por property.
Decisão¶
Adota a login da lib com o bump xadm-seguranca 0.6.1 → 0.7.2, no mesmo PR (bumpar é migrar,
constituição §5):
- Apaga
src/main/jte/login.jte— oXadmLoginControllerda 0.7.2 renderizaxadm/logindo próprio JAR (GET /login,POST /login/callbackePOST /logoutinalterados). - Preserva a identidade que a view local tinha, por property (título vazio = derivado do
app-nome, decisão 0032):
xadm:
views:
app-nome: "BI Comercial"
login:
marca: true
tagline: "Um ERP Completo para sua empresa"
rodape: "BI Comercial · Processador XLS"
Três consequências locais, com o porquê:
- A view da lib linka os paths do kit (
/css/bootstrap.min.css,/js/bootstrap.bundle.min.js). Isso forçou o fim da divergência deliberada do vendor local (/public/vendor/bootstrap-5.3.3): manter os dois seria servir dois Bootstrap — o da lib quebraria sem os paths do kit. O app adota os estáticos do kit verbatim (Bootstrap 5.3.8) e olayout.jtevolta aos paths do kit. Sem o/js/**anônimo (intercept-url-map+ViewWhitelist), o bundle responderia 401 justo na tela de login (lição da constituição 1.4.1). BearerTokenGuard(fail-fast, constituição 1.4.7).app.api-tokendeclarado-e-vazio agora recusa o boot em vez de subir healthy respondendo 401 a tudo — a classe de indisponibilidade silenciosa que a camada 2 do smoke existe para pegar do lado de fora.- Seam destravado, não ligado. A 0.7.2 traz o
POST /smoke/session(dormindo por@Requiressemsmoke.token); rotasession/m2mno manifesto continua deferida — faltaSMOKE_TOKENno secret e a property no recurso Coolify (RD 0024).
Correção (2026-09-15): o manifesto declara a rota
session(GET /processamentos) e am2m; o seam liga com oSMOKE_TOKENno recurso (RD 0024).
Consequências¶
- Prova no mesmo passo: o
AuthIntegrationTest(GET/logincom "Entrar com Google" + CSRF double-submit contra a página) agora exercita a view da lib — é o e2e-local pegando o drift de contrato da adoção, como manda a §5. - Estáticos travados por teste (java-micronaut §UI, constituição 1.4.1): o
EstaticosDoKitAnonimosTestextrai oshref/srcdokit/layout.jtee do HTML doGET /logine afirma200sem credencial em cada um, com o contexto real. Controle vermelho feito: sem/js/**nointercept-url-map, reprova. - Este RD é ponteiro: divergência de mérito sobre o mecanismo se resolve na central 0032, não aqui. O que se decide localmente é a identidade (marca/tagline/rodapé) e o quando.