Bom tenho um phaseListener que cuida das requisições da aplicação, o problemas é que ele não retorna o usuário que foi colocado na sessão, então sempre sou remetido a tela de login novamente.
public class AutorizationListener implements PhaseListener{
private static final long serialVersionUID = 1L;
@Override
public void afterPhase(PhaseEvent event) {
FacesContext facesContext = event.getFacesContext();
String currentPage = facesContext.getViewRoot().getViewId();
boolean isLoginPage = (currentPage.lastIndexOf("login.xhtml") > -1 || currentPage.lastIndexOf("cadastroAluno.xhtml") > -1);
HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);
Object currentUser = session.getAttribute("aluno"); //AQUI ELE SEMPRE RETORNA NULL
if ((!isLoginPage) && (currentUser == null)) {
NavigationHandler nh = facesContext.getApplication().getNavigationHandler();
nh.handleNavigation(facesContext, null, "loginPage");
}
}
@Override
public void beforePhase(PhaseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
}
Estou setando o usuário desta maneira quando ele faz o login. O método funciona perfeitamente, verifica os dados no BD e vai a pagina welcome.jsf, todavia se o usuário tentar ir para qualquer outra página ele volta a página de login.
public String login(){
AlunoDAO alunoDAO = new AlunoDAOImpl();
Aluno temp = alunoDAO.verificaAluno(getAluno());
FacesContext facesContext = FacesContext.getCurrentInstance();
if(temp == null){
FacesMessage facesMessage = new FacesMessage("Erro nos dados fornecidos");
facesContext.addMessage("aviso", facesMessage);
return "fracassoLogin";
}else{
this.aluno = temp;
this.aluno.setAlunochas(alunoDAO.carregaAlunoCompetencias(this.aluno));
HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);
session.setAttribute("aluno", this.aluno); //AQUI COLOCO O USER NA SESSÃO, MAS NAO CONSIGO RECUPERÁ-LO NO PHASE LISTENER
facesContext.addMessage("bem-vindo", new FacesMessage("Bem-vindo, "+this.aluno.getNome().toUpperCase()));
return "welcome";
}
}
Alguém poderia me ajudar com tal problema?
[]s