Boa tarde.
Tenho três páginas: index.xhtml, cadastrar.xhtml, recuperar_senha.xhtml e uma página solicitacoes.xhtml sendo acessada apenas após o login…
o problema é que quando tento acessar a página recuperar_senha.xhtml ou a página cadastrar.xhtml sem estar logado sou direcionado para a página index.xhtml…
teria como fazer esse controle de páginas que podem ser acessadas estando logado e não logado no phaseListener?
outro problema é que quando estou logado e clico no botão voltar do navegador ele volta para a página index.xhtml e só não permite voltar quando o usuário está logado só se for digitado no navegador…
Se alguém puder ajudar eu agradeço.
public class AutorizaListener implements PhaseListener {
private static final long serialVersionUID = 1L;
public void afterPhase(PhaseEvent event) {
FacesContext contexto = event.getFacesContext();
String paginaAtual = contexto.getViewRoot().getViewId();
boolean isLoginPage = paginaAtual.lastIndexOf("index.xhtml") > -1;
HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
if ((sessao.getAttribute("pessoa") == null) && (!isLoginPage)) {
NavigationHandler navegar = contexto.getApplication().getNavigationHandler();
navegar.handleNavigation(contexto, null, "index");
} else if ((sessao.getAttribute("pessoa") != null) && isLoginPage) {
NavigationHandler navegar = contexto.getApplication().getNavigationHandler();
navegar.handleNavigation(contexto, null, "solicitacoes");
}
}
public void beforePhase(PhaseEvent event) {
}
public PhaseId getPhaseId() {
return PhaseId.RESTORE_VIEW;
}
<lifecycle>
<phase-listener>br.gov.ibge.sar.apresentacao.AutorizaListener</phase-listener>
</lifecycle>