[Resolvido]Problemas PhaseListener

Bom galera, fiz a área administrativa do sistema mas está com um problema. Depois que eu me logo no sistema ele não me deixa
navegar pelas páginas que necessitam de usuário/senha, tipo assim, me logo no sistema e então vou para a página de cadastro de produto
mas então se a partir daí eu quero ir para a página de cadastro de usuário o sistema pede para eu me logar novamente, então como eu resolvo isso ??
Fiz isso através do PhaseListener, abaixo minhas classes.

AuthorizationListener.

[code]
package utils;

import javax.faces.application.NavigationHandler;
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;
import model.Usuario;

/**
*

  • @author Egon Henrique
    */
    public class AuthorizationListener implements PhaseListener {

    private static final long serialVersionUID = 1L;

    @Override
    public void afterPhase(PhaseEvent event) {
    //dquirindo FacesContext
    FacesContext facesContext = event.getFacesContext();
    //Armazenando página que fez requisição
    String currentPage = facesContext.getViewRoot().getViewId();
    //Verifica se é página de login
    boolean isLoginPage = (currentPage.lastIndexOf(“index.xhtml”) > -1) ||
    (currentPage.lastIndexOf(“contato.xhtml”) > -1) || (currentPage.lastIndexOf(“queijos.xhtml”) > -1);
    //Adquirindo a sessão(é a mesma onde deverá guardar o usuário no nível de sessão
    //com o descritor currentUser
    HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);
    //Recuperando valor da sessão
    Usuario user = (Usuario) session.getAttribute(“currentUser”);
    //Se não ta logado, redireciona para lógica que(navigation rule) atende a loginPage
    if(!isLoginPage && user == null) {
    NavigationHandler nh = facesContext.getApplication().getNavigationHandler();
    nh.handleNavigation(facesContext, null, “loginPage”);
    }
    }

    //}

    @Override
    public void beforePhase(PhaseEvent event) {

    }

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

}[/code]

usuarioController.

[code]
package controller;

import DAO.UsuarioDAO;
import javax.faces.component.UIData;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import model.Usuario;

/**
*

  • @author Egon Henrique
    */
    public class UsuarioController {

    private Usuario usuario;
    private String senha;
    private String login;
    private Usuario usuarios;
    private UIData tabela;
    private UsuarioDAO usuarioDAO;

    public UIData getTabela() {
    return tabela;
    }

    public void setTabela(UIData tabela) {
    this.tabela = tabela;
    }

    public Usuario getUsuarios() {
    return usuarios;
    }

    public void setUsuarios(Usuario usuarios) {
    this.usuarios = usuarios;
    }

    public String getLogin() {
    return login;
    }

    public void setLogin(String login) {
    this.login = login;
    }

    public String getSenha() {
    return senha;
    }

    public void setSenha(String senha) {
    this.senha = senha;
    }

    public Usuario getUsuario() {
    return usuario;
    }

    public void setUsuario(Usuario usuario) {
    this.usuario = usuario;
    }

    public UsuarioController() {
    usuario = new Usuario();
    preencherTabela();
    }

    public String Salvar() throws Exception {
    usuarioDAO = new UsuarioDAO();
    //this.produto.setFoto(foto);
    usuarioDAO.inserir(usuario);
    usuario = new Usuario();
    preencherTabela();
    return null;
    }

    public void preencherTabela() {
    usuarioDAO = new UsuarioDAO();
    usuarios = usuarioDAO.getUsuario();
    }

    public void excluir(Usuario usuario) {
    usuario = (Usuario) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get(tabela.getVar());
    usuarioDAO = new UsuarioDAO();
    usuarioDAO.delete(usuario);
    preencherTabela();
    }

    public String doLogin() {

     FacesContext fc = FacesContext.getCurrentInstance();
     HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);
    
     usuarioDAO = new UsuarioDAO();
     usuario = usuarioDAO.getUsuario();
    
     if(login.equalsIgnoreCase(usuario.getLogin()) && senha.equalsIgnoreCase(usuario.getSenha())) {
         usuario = new Usuario();
         usuario.setLogin(login);
         usuario.setSenha(senha);
         session.setAttribute("usuario", usuario);
         login = null;
         senha = null;
         return "cadastroProduto.xhtml";
     } else {
         return "login.xhtml";
     }
    

    }[/code]

Faces-Config.

[code]

page/cadastroProduto.xhtml

loginPage
page/login.xhtml

<navigation-rule>
    <from-view-id>page/cadastroOvelha.xhtml</from-view-id>
    <navigation-case>
        <from-outcome>loginPage</from-outcome>
        <to-view-id>page/login.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>

<navigation-rule>
    <from-view-id>page/cadastroUsuario.xhtml</from-view-id>
    <navigation-case>
        <from-outcome>loginPage</from-outcome>
        <to-view-id>page/login.xhtml</to-view-id>
    </navigation-case>
</navigation-rule>

<lifecycle>
    <phase-listener>utils.AuthorizationListener</phase-listener>
</lifecycle>

[/code]

kara… no usuarioController vc setou o usuario na session no atributo “usuario”…

session.setAttribute("usuario", usuario);

e no AuthorizationListener vc está tentando achar esse kara no atributo “currentUser”…

Usuario user = (Usuario) session.getAttribute("currentUser");

vai vir nulo mesmo…

o certo é:

Usuario user = (Usuario) session.getAttribute("usuario");

Falows.

To no trabalho agora, testo qdo chego em casa, mas então pelo que entendi é assim:
é nessa linha que eu digo qual usuário está logado no sistema ??

session.setAttribute("usuario", usuario);

e daí no AuthorizationListener eu pego o usuário através dessa linha ??

Usuario user = (Usuario) session.getAttribute("usuario");

seria essa a lógica ??

exato.

Vlw aí carlos_hen, agora funciona direitinho.
Então o código ficou assim

AuthorizationListener.java

[code]
public class AuthorizationListener implements PhaseListener {

private static final long serialVersionUID = 1L;  

@Override  
public void afterPhase(PhaseEvent event) {  
    //dquirindo FacesContext  
    FacesContext facesContext = event.getFacesContext();  
    //Armazenando página que fez requisição  
    String currentPage = facesContext.getViewRoot().getViewId();  
    //Verifica se é página de login  
    boolean isLoginPage = (currentPage.lastIndexOf("index.xhtml") > -1) ||  
            (currentPage.lastIndexOf("contato.xhtml") > -1) || (currentPage.lastIndexOf("queijos.xhtml") > -1);  
    //Adquirindo a sessão(é a mesma onde deverá guardar o usuário no nível de sessão  
    //com o descritor currentUser  
    HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);  
    //Recuperando valor da sessão  
    Usuario user = (Usuario) session.getAttribute("usuario");  
    //Se não ta logado, redireciona para  lógica que(navigation rule) atende a loginPage  
    if(!isLoginPage && user == null) {  
        NavigationHandler nh = facesContext.getApplication().getNavigationHandler();  
        nh.handleNavigation(facesContext, null, "loginPage");  
    }  
    }  
      
//}  

@Override  
public void beforePhase(PhaseEvent event) {  
       
}  


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

} [/code]

UsuarioController.java

public String doLogin() {  
  
        FacesContext fc = FacesContext.getCurrentInstance();  
        HttpSession session = (HttpSession) fc.getExternalContext().getSession(false);  
  
        usuarioDAO = new UsuarioDAO();  
        usuario = usuarioDAO.getUsuario();  
  
        if(login.equalsIgnoreCase(usuario.getLogin()) && senha.equalsIgnoreCase(usuario.getSenha())) {  
            usuario = new Usuario();  
            usuario.setLogin(login);  
            usuario.setSenha(senha);  
            session.setAttribute("usuario", usuario);  
            login = null;  
            senha = null;  
            return "cadastroProduto.xhtml";  
        } else {  
            return "login.xhtml";  
        }  
    }