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, "• O usuário existe, porém não cadastrado neste sistema.!", ""));
return "login";
}
} else {
FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "• 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, "• É necessário estar logado para acessar este conteúdo.!", ""));
}
}
@Override
public void beforePhase(PhaseEvent event) {
}
@Override
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
}
