Mesmo tendo registrado o novo PhaseListener "Autorizador" no arquivo faces-config.xml o mesmo não foi executado! Fiz a mesma implementação de "afterPhase" no outro PhaseListener do projeto (LogPhaseListener) e a rotina rodou normalmente, redirecionando para a página de login caso não houvesse usuário na sessão. Seguem os códigos do PhaseListener e faces-confg.xml:
package br.com.caelum.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.caelum.livraria.modelo.Usuario;
public class Autorizador implements PhaseListener {
public static final String NOME_PAGINA_LOGIN = "/login.xhtml";
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public void afterPhase(PhaseEvent event) {
FacesContext context = event.getFacesContext();
String nomePagina = context.getViewRoot().getViewId();
if (NOME_PAGINA_LOGIN.equals(nomePagina)) {
return;
}
Usuario usuarioLogado = (Usuario) context.getExternalContext().getSessionMap().get("usuarioLogado");
if (usuarioLogado != null) {
return;
}
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 null;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-facesconfig_2_2.xsd">
<lifecycle>
<phase-listener>br.com.caelum.livraria.util.LogPhaseListener</phase-listener>
<phase-listener>br.com.caelum.livraria.util.Autorizador</phase-listener>
</lifecycle>
</faces-config>