1
resposta

Autorização pelo PhaseListener não está funcionando

Estou na aula 12 do cursso 'Java e JSF I: Sua aplicação web com JSF2', criei a classe Autorizador mas continuo acessando as paginas livro.xhtml e autor.xhtml mesmo sem fazer login. A classe LogPhaseListener também não está imprimindo no console as fases executadas. No console não aparece nenhuma mensagem de erro.

Autorizador

package br.com.alura.livraria.util;

import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;

import br.com.alura.livraria.modelo.Usuario;

public class Autorizador implements PhaseListener {

    private static final long serialVersionUID = 1L;

    @Override
    public void afterPhase(PhaseEvent evento) {

        FacesContext context = evento.getFacesContext();
        String nomePagina = context.getViewRoot().getViewId();

        System.out.println(nomePagina);

        if("/login.xhtml".equals(nomePagina)) {
            return;
        }

        Usuario usuarioLogado = (Usuario) context.getExternalContext().getSessionMap().get("usuarioLogado");

        if(usuarioLogado != null) {
            return;
        }

        //redirecionamento para login.xhtml

        NavigationHandler handler = context.getApplication().getNavigationHandler();
        handler.handleNavigation(context, null, "/login?faces-redirect=true");
        context.renderResponse();
    } 

    @Override
    public void beforePhase(PhaseEvent event) {
    }

    @Override
    public PhaseId getPhaseId() {
        return PhaseId.RESTORE_VIEW;
    }
}

LogPhaseListener

package br.com.alura.livraria.util;

import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;

public class LogPhaseListener implements PhaseListener {

    private static final long serialVersionUID = 1L;

    @Override
    public void afterPhase(PhaseEvent arg0) {
    } 

    @Override
    public void beforePhase(PhaseEvent event) {
        System.out.println("FASE: " + event.getPhaseId());
    }

    @Override
    public PhaseId getPhaseId() {
        return PhaseId.ANY_PHASE;
    }
}
1 resposta

Oi Cleomar,

Já faz um tempinho, mas você conseguiu resolver esse problema?