PhaseListener

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>