Problemas com o PhaseListener

Salve

To tentando implementar o Phase Listener mas ta dando erro

public class AuthorizationListener implements PhaseListener
{
	public void afterPhase(PhaseEvent evento)
	{
		FacesContext facesContext = evento.getFacesContext();  
        String currentPage = facesContext.getViewRoot().getViewId();  
        
		FacesContext context = FacesContext.getCurrentInstance();
		ExternalContext external = context.getExternalContext();
		HttpSession session = (HttpSession)external.getSession(true);
		
		LoginManager usuarioLogado= (LoginManager)session.getAttribute("loginManager");
		
		if(currentPage.contains("index.xhtml") || currentPage.contains("inicio.xhtml"))
		{
			
		}
		else if((usuarioLogado != null && usuarioLogado.getUsuario().getPrivilegios() != null) && (usuarioLogado.getUsuario().getPrivilegios().contains("um") && currentPage.contains("banco.xhtml")))
		{
			
		}
		else if((usuarioLogado != null && usuarioLogado.getUsuario().getPrivilegios() != null) && (usuarioLogado.getUsuario().getPrivilegios().contains("dois") && currentPage.contains("usuario.xhtml")))
		{
			
		}
		else
		{
			 NavigationHandler nh = facesContext.getApplication().getNavigationHandler();  
	         nh.handleNavigation(facesContext, null, "acessorestrito");
	    }
	}

	public void beforePhase(PhaseEvent evento) 
	{

	}

	public PhaseId getPhaseId() 
	{
		return PhaseId.RENDER_RESPONSE;
	}
}

O erro que ta dando é esse:

INFO: Exception when handling error trying to reset the response.
java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed
	at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:483)
	at com.sun.faces.context.ExternalContextImpl.redirect(ExternalContextImpl.java:576)
	at com.sun.faces.application.NavigationHandlerImpl.handleNavigation(NavigationHandlerImpl.java:182)
	at filtro.AuthorizationListener.afterPhase(AuthorizationListener.java:41)
	at com.sun.faces.lifecycle.Phase.handleAfterPhase(Phase.java:189)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:107)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at filtro.ConexaoHibernate.doFilter(ConexaoHibernate.java:60)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Alguém sabe como resolver isso, por favor?

Veja essa parte do stack:

at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:483)
at com.sun.faces.context.ExternalContextImpl.redirect(ExternalContextImpl.java:576)

a mensagem de erro diz:

java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed

Ou seja voce esta tentando redirecionar para a página após ter já “escrito na resposta”, de uma olhada no seu handleNavigation e no ciclo de vida que voce está usando,
mas o fato é que voce está redirecionando uma vez já escrita a resposta.

Caro ribclauport,

Realmente havia percebido que está tentando dar dois response, mas o fato é que não sei como fazer da forma correta.
Se puder me ajudar agradeço.

Ficou faltando permitir o acesso da pagina acessorestrito dentro do phase, por isso estava dando varios response.

	public void afterPhase(PhaseEvent evento)
	{
		FacesContext facesContext = evento.getFacesContext();  
        String currentPage = facesContext.getViewRoot().getViewId();  
        
		FacesContext context = FacesContext.getCurrentInstance();
		ExternalContext external = context.getExternalContext();
		HttpSession session = (HttpSession)external.getSession(true);
		
		LoginManager usuarioLogado= (LoginManager)session.getAttribute("loginManager");
		
		if(currentPage.contains("index.xhtml") || currentPage.contains("inicio.xhtml") || currentPage.contains("acessorestrito.xhtml"))
		{
			
		}
		else if((usuarioLogado != null && usuarioLogado.getUsuario().getPrivilegios() != null) && (usuarioLogado.getUsuario().getPrivilegios().contains("um") && currentPage.contains("banco.xhtml")))
		{
			
		}
		else if((usuarioLogado != null && usuarioLogado.getUsuario().getPrivilegios() != null) && (usuarioLogado.getUsuario().getPrivilegios().contains("dois") && currentPage.contains("usuario.xhtml")))
		{
			
		}
		else
		{
			 NavigationHandler nh = facesContext.getApplication().getNavigationHandler();  
	         nh.handleNavigation(facesContext, null, "acessorestrito");
	    }
	}

	public void beforePhase(PhaseEvent evento) 
	{

	}

	public PhaseId getPhaseId() 
	{
		return PhaseId.RESTORE_VIEW;
	}
}

Como posso fazer para evitar que quando o usuário clicar no Botão back do navegador, mostre a página anterior, redirecionando para a página de login direto???

Teria algum exemplo de código??