Problemas com PhaseListener (Login)

Bom dia pessoal,

Estou tentando fazer um sistema de login utilizando o PhaseListener. O problema é que o PhaseListener não deixa o bean do login executar.

Segue o código:

PhaseListener

public class AuthorizationListener implements PhaseListener {

	public void afterPhase(PhaseEvent event) { 
		FacesContext facesContext = event.getFacesContext();
		String currentPage = facesContext.getViewRoot().getViewId();
		
		boolean isLoginPage = (currentPage.lastIndexOf("Login.jsf") > -1);
		HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);
		Usuario logado = (Usuario)session.getAttribute("logado");

		if (!isLoginPage && logado == null) {
			NavigationHandler nh = facesContext.getApplication().getNavigationHandler();
			nh.handleNavigation(facesContext, null, "Login");
		}
	}
	public void beforePhase(PhaseEvent event) {
	}
	
	public PhaseId getPhaseId() {
		return PhaseId.RESTORE_VIEW;
	}

}

Login.jsf

<!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://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets">

<f:view>
	<h:form>
		<h:outputText value="teste" />
		<h:inputText value="#{Usuario.nome}" />
		<h:commandButton action="#{Usuario.verifica}" value="Verifica" />
		<h:outputText value="#{Usuario.nome}" />
	</h:form>
	<h:messages />
</f:view>
</html>

Principal.jsf

<!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://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:rich="http://richfaces.org/rich">

<f:view>
	<rich:calendar>
		
	</rich:calendar>
	
	<h:inputText value="#{Usuario.nome}" /> 
</f:view>

</html>

Usuario.java

package Controle;

import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import bsh.This;
 
public class Usuario {
	public String nome = "";
	FacesContext facesContext = FacesContext.getCurrentInstance();
	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
	public String verifica() throws CloneNotSupportedException{
		if(nome.equals("X")){
			Usuario usuario = new Usuario();
			FacesContext facesContext = FacesContext.getCurrentInstance(); 

			HttpServletRequest request = (HttpServletRequest) facesContext.getCurrentInstance().getExternalContext().getRequest(); 

			HttpSession session = request.getSession();
			session.setAttribute("logado", usuario); 	

			return "Principal";
		}else{
			return "Login";
		}
	}


}

faces-config.xml

<?xml version="1.0" encoding="UTF-8"?> <faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"> <managed-bean> <managed-bean-name>Usuario</managed-bean-name> <managed-bean-class>Controle.Usuario</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <navigation-rule> <from-view-id>*</from-view-id> <navigation-case> <from-outcome>Principal</from-outcome> <to-view-id>/Principal.xhtml</to-view-id> </navigation-case> <navigation-case> <from-outcome>Login</from-outcome> <to-view-id>/Login.xhtml</to-view-id> </navigation-case> </navigation-rule> <application> <view-handler>com.sun.facelets.FaceletViewHandler</view-handler> </application> <lifecycle> <phase-listener>Controle.AuthorizationListener</phase-listener> </lifecycle> </faces-config>

Alguem sabe como resolver?

Estou com o mesmo problema. Só que no meu caso, ele filtra as requisiçoes, caso o isLoginPage e o currentUser nao forem nulos, eles liberam o acesso. O problema que ele só libera o acesso para uma das páginas, as seguites a partir dessa nao sao liberadas, e voltam para a pagina de login.

Kleber-rr, estou com este mesmo problema, você conseguiu resolver? Caso tenha resolvido pode postar a solução?
vlw!

Não sei se vocês tiraram daqui, mais talvez possa ajudar em algo.

http://rodrigolazoti.com.br/2008/09/01/filtrando-usuarios-logados-em-jsf-com-phaselistener/

luis.feitoza, estou seguindo este tutorial sim, porém no meu “currentUser” esta nulo, não o que estou fazendo de errado!

Pessoal, consegui resolver o problema do “currentUser” que estava nulo, pra quem ainda precisar! No bean de controle insira o codigo abaixo!

FacesContext ctx = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) ctx.getExternalContext().getSession(false);
session.setAttribute("currentUser", currentUser);

como o apalmeira, fez na classe Usuario.java
vlw, ate +…