Estou com um problema a algum tempo já li muitos tutorias e procurei no fórum, mas sempre chego ao mesmo ponto e não consigo achar qual é o meu erro ou a maneira certa de implantar o PhaseListener.
Consigo logar e acessar a primeira pagina, mas depois da primeira pagina se eu acessar qualquer outra, a sessão retorna nula e é criado uma nova sessão.
Eu reduzi o código, removi todas as validações e logica para simplificar, ficarei muito grato se alguém puder me ajudar pois esta difícil, chegou em um ponto que preciso implantar o controle de pagina e gostaria de usar o PhaseListener.
Minha classe PhaseListener:
public class AuthorizationListener implements PhaseListener {
private static final long serialVersionUID = 1L;
public void afterPhase(PhaseEvent event) {
FacesContext facesContext = event.getFacesContext();
String currentPage = facesContext.getViewRoot().getViewId();
boolean isLoginPage = (currentPage.lastIndexOf("login.xhtml") > -1);
HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);
Object retornoUser = session.getAttribute("currentUser");
String currentUser = "";
if (retornoUser != null) {
currentUser = retornoUser.toString();
}
Logger.getLogger("HIPERAPP").log(Level.INFO, "1 > \nPagina " + currentPage + "\nUsuario: "
+ currentUser + "\nRetorno: " + isLoginPage + "\n" + "Id: " + session.getId() + "\n");
}
public void beforePhase(PhaseEvent event) {
}
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
}
Minha classe de login:
@Named("login")
@SessionScoped
public class Login implements Serializable {
private static final long serialVersionUID = 1L;
// private Usuarios usuarios;
private String usuario;
private String senha;
public String efetuaLogin() {
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
session.setAttribute("currentUser", usuario);
return "principal?faces-redirect=true";
}
public String getSenha() {
return senha;
}
public void setSenha(String senha) {
this.senha = senha;
}
public String getUsuario() {
return usuario;
}
public void setUsuario(String usuario) {
this.usuario = usuario;
}
}
Dentro do faces-config coloquei:
<lifecycle>
<phase-listener>com.aramo.app.classes.AuthorizationListener</phase-listener>
</lifecycle>
Quanto acesso a pagina de login, coloco o usuario e senha, tenho essa saida:
18:42:59,505 INFO [app] (default task-9) 1 >
Pagina /login.xhtml
Usuario:
Retorno: true
Id: BaVOKxfKqzG3YypQDrASd8Wd5OHqzm6NRUHiB0XA
18:43:01,863 INFO [app] (default task-9) 1 >
Pagina /login.xhtml
Usuario:
Retorno: true
Id: BaVOKxfKqzG3YypQDrASd8Wd5OHqzm6NRUHiB0XA
18:43:01,871 INFO [app] (default task-9) 1 >
Pagina /principal.xhtml
Usuario: anderson
Retorno: false
Id: BaVOKxfKqzG3YypQDrASd8Wd5OHqzm6NRUHiB0XA
Ao clicar em qualquer outra pagina recebo essa saida:
18:44:04,092 INFO [HIPERAPP] (default task-9) 1 >
Pagina /listaAgente.xhtml
Usuario:
Retorno: false
Id: Y2C-aFm5uaEQ3hHlLi3MIjD9NH6cjPMMhVftk3vi
E nesse momento que vem o problema, que é criado uma nova sessão.