Dificuldade com o PhaseListener

0 respostas
Kleber-rr

Olá pessoal, estou tendo dificuldades na implementação do PhaseListener para a validação do usuario na sessão. O problema é o seguinte: No meu sistema de login, o usuario acessa o sistema, no qual tem abas chamando outras paginas jsp que acessam informações em um banco de dados. O problema, é que, com a implementação do PhaseListener, o usuario loga direitinho, mas só tem acesso a pagina principal. Quando ele tenta acessar ou gravar alguma informação no banco, ou tenta abrir uma outra jsp a partir dessa principal, ele dá um reload no filtro (PhaseListener) e volta a tela de login.

Alguem pode me ajudar?? A dias eu estudo sobre isso e ainda não achei uma solução. Agradeço a ajuda. Segue meu PhaseListener:
package br.com.caelum.fj26.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 javax.servlet.http.HttpSession;

import br.com.caelum.fj26.modelo.Usuario;

public class AuthorizationListener implements PhaseListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public void beforePhase(PhaseEvent event) {

	}

	public void afterPhase(PhaseEvent event) {
		System.out.println("<-----------VALIDANDO REQUISIÇÃO------------>");

		FacesContext facesContext = event.getFacesContext();
		String currentPage = facesContext.getViewRoot().getViewId();

		boolean isLoginPage = (currentPage.lastIndexOf("login.jsp") > -1);
		HttpSession session = (HttpSession) facesContext.getExternalContext()
				.getSession(true);
		System.out.println("=======validado a página=======");
		Usuario currentUser = (Usuario) session.getAttribute("currentUser");

		if (!isLoginPage && currentUser == null) {
			NavigationHandler nh = facesContext.getApplication()
					.getNavigationHandler();
			System.out.println("<-------condicao lançada-------->");
			nh.handleNavigation(facesContext, null, "loginPage");
			System.out.println("<-------usuario nao logado-------->");
		}
	}

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

}
Criado 4 de agosto de 2009
Respostas 0
Participantes 1