Class XadmLoginController

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

@Controller @Secured("isAnonymous()") @Requires(property="auth.firebase-project-id",pattern=".+") @Requires(property="auth.session-secret",pattern=".+") public class XadmLoginController extends Object
Fluxo de login Google (Firebase) das views X-Adm, COMPARTILHADO — restrito a emails do domínio configurado (spec 006). Promovido de 5 cópias por app para a lib xadm-seguranca (ADR/spec 007). Um app que dependa desta lib herda estas rotas automaticamente; o app só traz a config auth.* e os cosméticos xadm.views.login.* (LoginViewSettings).

A TELA também é da lib (0.8.0): 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-submit xadm_login_csrf.
  • POST /login/callback — valida CSRF + Firebase ID token + domínio e emite o cookie de sessão xadm_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 = "" (0.7.3): 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.

Migração (spec 007, L6): ao adotar a lib 0.5.0+, o app DEVE remover seu LoginController local no mesmo PR — dois @Controller("/") com /login colidem no boot.

  • Field Details

  • Constructor Details

  • Method Details

    • getLogin

      @Get("/login") @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") 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") public io.micronaut.http.HttpResponse<?> postLogout()