Class XadmLoginController
auth.* e os cosméticos xadm.views.login.* (LoginViewSettings).
A TELA também é da lib (decisão 0032): a view viaja compilada no jar, sob namespace
(xadm/login.jte → …precompiled.xadm.JteloginGenerated), e o app apaga o seu
src/main/jte/login.jte no mesmo PR da adoção. O namespace não é decoração: na raiz, a view
da lib teria a mesma FQCN gerada que a do app e uma sombraria a outra sem erro nem aviso.
GET /login— renderiza a página com o Firebase JS SDK; grava o cookie CSRF double-submitxadm_login_csrf.POST /login/callback— valida CSRF + Firebase ID token + domínio e emite o cookie de sessãoxadm_session. Erros em RFC-7807 (ProblemDetail).POST /logout— expira o cookie de sessão, 303 para/login.
Bean condicional: só instanciado quando auth.firebase-project-id E
auth.session-secret estão configurados — em dev/test sem envs a política de view do app fica
em bypass e estas rotas não existem. O gate é pattern = ".+", não notEquals = "":
com a property ausente o notEquals passa, a rota registra e nem este
controller nem o SecurityFilter (que injeta o fetcher de sessão) instanciam — 500 em tudo.
pattern reprova a ausente e a declarada-vazia.
Fora do event loop (@ExecuteOn(BLOCKING)): o callback valida o ID token contra o
JWKS do Google, baixado por HTTP síncrono quando o cache expira. A lib não conta com o
micronaut.server.thread-selection: AUTO do adotante — sem ele, o default MANUAL
rodaria esse I/O na thread do Netty.
Migração: o app que adota a lib remove o seu LoginController local no mesmo PR —
dois @Controller("/") com /login colidem no boot.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final recordBody doPOST /login/callback. -
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionXadmLoginController(AuthSettings settings, FirebaseIdTokenValidator validator, SessionTokenService sessionTokens, LoginViewSettings viewSettings) -
Method Summary
Modifier and TypeMethodDescriptionio.micronaut.http.HttpResponse<?> io.micronaut.http.HttpResponse<?> postCallback(io.micronaut.http.HttpRequest<?> request, XadmLoginController.CallbackBody body) io.micronaut.http.HttpResponse<?>
-
Field Details
-
CSRF_COOKIE
- See Also:
-
-
Constructor Details
-
XadmLoginController
public XadmLoginController(AuthSettings settings, FirebaseIdTokenValidator validator, SessionTokenService sessionTokens, LoginViewSettings viewSettings)
-
-
Method Details
-
getLogin
@Get("/login") @Secured("isAnonymous()") @Produces("text/html") @View("xadm/login") public io.micronaut.http.HttpResponse<?> getLogin(io.micronaut.http.HttpRequest<?> request, @Nullable @QueryValue("from") String from) -
postCallback
@Post(value="/login/callback", consumes="application/json", produces="application/json") @Secured("isAnonymous()") public io.micronaut.http.HttpResponse<?> postCallback(io.micronaut.http.HttpRequest<?> request, @Body @Nullable XadmLoginController.CallbackBody body) -
postLogout
@Post(value="/logout", consumes="application/x-www-form-urlencoded") @Secured("isAnonymous()") public io.micronaut.http.HttpResponse<?> postLogout()
-