Bom dia Pessoal,
preciso da ajuda de vocês para o seguinte, estou começando a implementar um projeto em jsf e phaselistener para autorização e verificação de usuario, peguei o phaselistener em alguns blogs e ate mesmo aki no guj, so que estou meu perdido, quando clico no meu botao logar quero que a minha aplicação redirecione para a pagina que esta dentro do meu managed bean, segue o codigo abaixo
phase listener:
package br.autenticacao;
import java.io.IOException;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.http.HttpSession;
public class Autenticacao implements PhaseListener{
private String[] paginasAutorizadas = new String[]{"/Admin/inicioAdmin.xhtml"};
public boolean verificarAutorizacao(String paginaRequisitada){
for(String pagina : paginasAutorizadas){
if (paginaRequisitada.equals(pagina)){
return true;
}
}
return false;
}
@Override
public void afterPhase(PhaseEvent event) {
System.out.println(event.getPhaseId());
FacesContext facesContexto = event.getFacesContext();
String paginaDestino = facesContexto.getViewRoot().getViewId();
System.out.println(paginaDestino);
if(event.getPhaseId().equals(PhaseId.APPLY_REQUEST_VALUES)){
FacesContext faces = event.getFacesContext();
HttpSession session = (HttpSession)faces.getExternalContext().getSession(true);
session.getAttribute("usuarioLogado");
String urlDestino = faces.getViewRoot().getViewId();
if(!verificarAutorizacao(urlDestino)){
try {
faces.getExternalContext().redirect("erro.xhtml");
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
}
}
@Override
public void beforePhase(PhaseEvent event) {
}
@Override
public PhaseId getPhaseId() {
return PhaseId.ANY_PHASE;
}
}
managed bean:
package br.bean;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
/**
*
* @author Bim
*/
@ManagedBean
@SessionScoped
public class UsuarioBean {
private String usuario;
private String senha;
/** Creates a new instance of UsuarioBean */
public UsuarioBean() {
}
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;
}
public String autenticando(){
return "redirecionandoPagina";
}
}
no meu metodo autenticando estou redirecionando para a pagina que eu quero no caso Admin/inicioAdmin.xhtml
index.xhtml
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:p="http://primefaces.prime.com.tr/ui"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<p:resources />
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form >
Usuario<br/>
<p:inputText value="#{usuarioBean.usuario}"/>
Senha<br/>
<p:inputText value="#{usuarioBean.senha}"/>
<p:commandButton action="#{usuarioBean.autenticando}" value="LOGAR"/>
</h:form>
</h:body>
</html>
faces-config
<?xml version='1.0' encoding='UTF-8'?>
<!-- =========== FULL CONFIGURATION FILE ================================== -->
<faces-config version="2.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
<lifecycle>
<phase-listener>br.autenticacao.Autenticacao</phase-listener>
</lifecycle>
<navigation-rule>
<from-view-id>faces/index.xhtml</from-view-id>
<navigation-case>
<from-outcome>redirecionandoPagina</from-outcome>
<to-view-id>/Admin/inicioAdmin.xhtml</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
</faces-config>
dentro do faces-config, fiz o navigation rule e depois chamei o redirecionandoPagina no meu managed bean usuarioBean, nao sei se estou fazendo certo, obrigado