Usuário logado com PhaseListener

2 respostas
savioalberto

Boa tarde amigos do fórum. Estou tendo um problema ao usar PhaseListener e gostaria ver se consigo resolver com a ajuda de vocês.

Seguinte. No LoginBean, eu tenho o método efetuarLogin que verifica se o usuário é valido, e se for eu guardo o usuário na sessão " usuarioLogado.guardaUsuarioLogado(usuarioValido); ". Até ai tudo bem, Logo com o usuário válido e sou redirecionando para página correspondente do usuário. Porém, quando acesso qualquer outra página sou redirecionando para a página de login. Parece que a classe UsuarioLogadoBean não esta ficando na sessão .

Aqui estão minhas classes. Dêem uma olhada, pra ver se conseguem ver onde estou errando.
Obrigado.

LoginBean

package br.com.fusionnet.mb;

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

import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;

import br.com.fusionnet.dao.DAO;
import br.com.fusionnet.dao.GrupoDAO;
import br.com.fusionnet.dao.UsuarioDAO;
import br.com.fusionnet.modelo.Grupo;
import br.com.fusionnet.modelo.Usuario;

@ViewScoped
@ManagedBean
public class LoginBean {
	
	private Long idGrupo;
	
	@NotEmpty(message="• Login não pode estar em branco.!")
	private String login;
	
	@Length(min=6, max=15, message="• Tamanho da senha deve ser entre 6 e 15.!")
	private String senha;
	
	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public Long getIdGrupo() {
		return idGrupo;
	}

	public void setIdGrupo(Long idGrupo) {
		this.idGrupo = idGrupo;
	}

	public String efetuarLogin() {
		Usuario usuario = new Usuario();
		Usuario usuarioValido;
		UsuarioDAO usuarioDAO = new UsuarioDAO();
		UsuarioLogadoBean usuarioLogado = new UsuarioLogadoBean();
		DAO<Grupo> grupoDAO = new DAO<Grupo>(Grupo.class);
		Grupo grupo;
		
		usuario.setLogin(login);
		usuario.setSenha(senha);
		usuarioValido = usuarioDAO.verificaUsuario(usuario);
		
		if (usuarioValido != null) {
			grupo = grupoDAO.listId(idGrupo);
			boolean valido = new GrupoDAO().verificaUsuarioGrupo(usuarioValido, grupo);
			
			if (valido) {
				usuarioLogado.guardaUsuarioLogado(usuarioValido);
				return grupo.getNome().toLowerCase() +"/"+ usuarioValido.getGrupo().getNome().toLowerCase();	
			} else{
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "&bull; O usuário existe, porém não cadastrado neste sistema.!", ""));
				return "login";
			}
		} else {
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "&bull; Usuário ou senha inválido.!", ""));
			return "login";
		}
	}

}

UsuarioLogadoBean

package br.com.fusionnet.mb;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import br.com.fusionnet.modelo.Usuario;

@SessionScoped
@ManagedBean
public class UsuarioLogadoBean implements Serializable {
	
	private static final long serialVersionUID = -6860476096478565603L;
	private Usuario usuario;
	
	public boolean isLogado() {
		return (usuario != null);
	}
	
	public void guardaUsuarioLogado(Usuario usuario) {
		//System.out.println("Usuario Logou - Guardou o usuario");
		this.usuario = usuario;
		//System.out.println(this.usuario.getLogin());
		//System.out.println("Passou");
	}
	
}

LoginPhaseListener

package br.com.fusionnet.listener;

import javax.faces.application.FacesMessage;
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.fusionnet.mb.UsuarioLogadoBean;

public class LoginPhaseListener implements PhaseListener {

	private static final long serialVersionUID = -883357255463258903L;

	@Override
	public void afterPhase(PhaseEvent event) {
		FacesContext context = event.getFacesContext();
		
		String pag = context.getViewRoot().getViewId();
		
		if( "/login.xhtml".equals(pag) ) {
			return;
		}
		
		UsuarioLogadoBean usuarioLogado = context.getApplication().evaluateExpressionGet(context, "#{usuarioLogadoBean}", UsuarioLogadoBean.class);
		System.out.println(usuarioLogado);
		System.out.println(usuarioLogado.isLogado());
		
		if(!usuarioLogado.isLogado()) {
			NavigationHandler handler = context.getApplication().getNavigationHandler();
			handler.handleNavigation(context, null, "/login");
			context.renderResponse();
			FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "&bull; É necessário estar logado para acessar este conteúdo.!", ""));
		}
		
	}

	@Override
	public void beforePhase(PhaseEvent event) {
		
	}

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

}

2 Respostas

savioalberto

Vinte e cinco visualizações.
Nenhuma sugestão. :frowning:

savioalberto

:?:

Criado 29 de setembro de 2010
Ultima resposta 30 de set. de 2010
Respostas 2
Participantes 1