Você está na página 1de 2

import javax.faces.context.

FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;

public class CtrPhaseListener implements PhaseListener {


// REPRESENTA A LISTA DE PÁGINA QUE O
USUÁRIO PODE ACESSAR
private String[] paginasAutorizadas = new String[]
{"/jsp/login.xhtml", "/jsp/dashBoard.xhtml",
"/jsp/consultarCliente.xhtml"};

//RESPONSÁVEL POR VERIFICAR SE O USUÁRIO ESTA AUTORIZADO


public boolean verificarAutorizacao(String paginaRequisitada){
for(String pagina : paginasAutorizadas){
if(paginaRequisitada.equals(pagina)){
return true;
}
}
return false;
}

/**
* Método chamado sempre apósa execução de uma
determinada PHASE
* @param event - {@link PhaseEvent}
*/
public void afterPhase(PhaseEvent event) {
System.out.println(event.getPhaseId());
FacesContext ctx = event.getFacesContext();
String paginaDestino = ctx.getViewRoot().getViewId();
System.out.println(paginaDestino);

//CONFORME DITO ANTERIORMENTE MESMO SEM


O USO DE NA FASE
// APPLY_REQUEST_VALUES O NOME DA PÁGINA
ESTARA ATUALIZADO, PORTANTO E
//NESSA FASE QUE PODEMOS VERIFICAR SE O
USUÁRIO ESTA AUTORIZADO A ACESSAR
//A PÁGINA REQUISITADA

if(event.getPhaseId().equals(PhaseId.APPLY_REQUEST_VALUES)){
FacesContext ctx = event.getFacesContext();

//CAPTURA O USUÁRIO LOGADO POIS SE ESTA


FASE FOR EXECUTADA SIGNIFICA QUE EXISTE
USUÁRIO AUTENTICADO
Object usuarioLogado = ctx.getExternalContext().getSession(true).getAttribute("usuarioLogado");
String urlDestino = ctx.getViewRoot().getViewId();

//VALIDA A AUTORIZAÇÃO PARA ACESSAR A PÁGINA

if(!verificarAutorizacao(urlDestino)){
//se o usuário não possuir acesso direciona para uma página de erro
ctx.getExternalContext().redirect("/jsp/paginaDeErroDeAutorizacao.xhtml");
}
}
}
/**
** Método chamado sempre antes de se executar uma
determinada PHASE
* @param event - {@link PhaseEvent}
*/
public void beforePhase(PhaseEvent event) {
System.out.println(event.getPhaseId());
FacesContext ctx = event.getFacesContext();
String paginaDestino = ctx.getViewRoot().getViewId();
System.out.println(paginaDestino);
if(event.getPhaseId().equals(PhaseId.RESTORE_VIEW)){
//AQUI DEVE FICAR A LÓGICA PARA VERIFICAR SE EXISTE UM USUÁRIO
//AUTENTICADO NA APLICAÇÃO
FacesContext ctx = event.getFacesContext();

//verifica se existe um usuário autenticado


if(ctx.getExternalContext().getSession(true).getAttribute("u
suarioLogado") == null){
//se não existir direciona para a página de LOGIN
ctx.getExternalContext().redirect("/jsp/paginaLogin.xhtml");
}
}
}
}

/**
* Retorna o PhaseId da fase do ciclo de vida JSF que
* esta sendo interceptado e gerênciado pelo Controle de
acesso.
*
* @return - {@link PhaseId}
*/
public PhaseId getPhaseId() {
return PhaseId.ANY_PHASE;
}
}