Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro --> Redirecionamento em excesso por localhost (Implementação do Autorizador)

Escrevi o código da aula para implementar o Autorizador e quando fui testar está dando o erro "Redirecionamento em excesso por localhost" ao tentar acessar qualquer um dos xhtml (livro, autor, login). Revisei todo o código mas não consegui identificar onde está o problema, alguma idéia ?

Desde já obrigado.

//***********************Autorizador.java********************

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 {

    private static final long serialVersionUID = -7243482575488562717L;

    @Override
    public void afterPhase(PhaseEvent evento) {    

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

        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;
    }

}

//************************Bean************************
package br.com.caelum.livraria.bean;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import br.com.caelum.livraria.dao.UsuarioDAO;
import br.com.caelum.livraria.modelo.Usuario;

@ManagedBean
@ViewScoped
public class LoginBean {

    private Usuario usuario = new Usuario();

    public Usuario getUsuario() {
        return usuario;
    }


    public String efetuarLogin() {
        System.out.println("Fazendo Login do Usuario" +this.usuario.getEmail());

        Boolean existe = new UsuarioDAO().existe(usuario);

        if(existe) {

            FacesContext context =  FacesContext.getCurrentInstance();
            context.getExternalContext().getSessionMap().put("usuarioLogado", this.usuario);
            return "livro?faces-redirect=true";
        }

        return null;

    }
}

//**************************** login.xhtml ************************

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:f="http://xmlns.jcp.org/jsf/core"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets">

<h:head />
<ui:composition template="_template.xhtml">

    <ui:define name="titulo">
            Login
        </ui:define>
    <ui:define name="conteudo">
        <h:form>
            <fieldset>
                <legend>Login</legend>
                <h:panelGrid columns="3">

                    <h:outputLabel value="e-mail:" for="email" />
                    <h:inputText id="email" value="#{loginBean.usuario.email}" required="true" >
                        <f:passThroughAttribute name="type" value="email"/>
                    </h:inputText>                    
                    <h:message for="email" id="messageEmail" />

                    <h:outputLabel value="senha" for="senha" />
                    <h:inputText id="senha" value="#{loginBean.usuario.senha}" required="true" >
                        <f:passThroughAttribute name="type" value="password" />
                    </h:inputText>
                    <h:message for="senha" id="messageSenha" />

                    <h:commandButton value="Efetue Login" action="#{loginBean.efetuarLogin}" />

                </h:panelGrid>
            </fieldset>
        </h:form> 

    </ui:define>
</ui:composition>

</html>
1 resposta
solução!

Achei o problema, estava faltando a barra no nome da página

        if("/login.xhtml".equals(nomePagina)) ...