Tentei injetar o FacesContext no Autorizador mas tá dando nullpointer já quando chamo a tela de login.
package br.com.caelum.livraria.util;
import java.io.Serializable;
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 javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import br.com.caelum.livraria.modelo.Usuario;
@Named
@ViewScoped
public class Autorizador implements PhaseListener, Serializable {
private static final String CAMINHO_PAGINA_LOGIN = "/login.xhtml";
private static final long serialVersionUID = -7243482575488562717L;
@Inject
private FacesContext contexto;
@Override
public void afterPhase(PhaseEvent evento) {
// Validaremos aqui para utilizar a árvore já restaurada
String nomeDaPaginaAtual = contexto.getViewRoot().getViewId();
System.out.println("Acessando página: " + nomeDaPaginaAtual);
// Se for a tela de login, pode passar
if (CAMINHO_PAGINA_LOGIN.equals(nomeDaPaginaAtual)) {
return;
}
Usuario usuarioLogado = (Usuario) contexto.getExternalContext().getSessionMap().get(Constantes.USUARIO_LOGADO);
if (usuarioLogado == null) {
// Usuário não autenticado. Retornar para o login...
NavigationHandler handler = contexto.getApplication().getNavigationHandler();
handler.handleNavigation(contexto, null, "/login?faces-redirect=true");
contexto.renderResponse();
}
// Usuário autenticado. Segue o jogo!
}
@Override
public void beforePhase(PhaseEvent arg0) {
}
@Override
public PhaseId getPhaseId() {
// Faremos a validação logo na primeira fase
return PhaseId.RESTORE_VIEW;
}
}
GRAVE: Servlet.service() for servlet [Faces Servlet] in context with path [/livraria] threw exception [null] with root cause
java.lang.NullPointerException
at br.com.caelum.livraria.util.Autorizador.afterPhase(Autorizador.java:31)
at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:189)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:107)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:123)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)