Problema ao obter Usuario da sesão com FacesContext

3 respostas
wender.jean

Galera seguinte,

Estou com um problema para recuperar o usuario atual da sessão, ja tentei varias formas e ele sempre retorna nulo.

Por exemplo, no meu action, que esta no escopo de sessão, estou setando a sessão da seguinte forma:

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("usrSession", bean);

Até ai tudo bem, no PhaseListener eu consigo pegar esse cara normalmente, utilizando a seguinte codigo:

FacesContext context = event.getFacesContext();
        ExternalContext ext = context.getExternalContext();

        String currentPage = context.getViewRoot().getViewId();

        HttpSession session = (HttpSession) ext.getSession(true);
        boolean verifyCurrentPage = (currentPage.lastIndexOf("index.xhtml") > -1);

        boolean auth = session.getAttribute("usrSession") != null;
        Usuario objUsuario = new Usuario();
        objUsuario = (Usuario) session.getAttribute("userSession");

Agora eu preciso pegar esse cara da sessão la no servico, tentei da seguinte forma:

objUsuario = (Usuario) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("userSession");

E tentei também obter uma instancia do UsuarioAction:

FacesContext fc = FacesContext.getCurrentInstance(); private UsuarioAction action = (UsuarioAction) fc.getApplication().getVariableResolver().resolveVariable(fc, "UsuarioAction");

Porém não obtive sucesso com nenhuma das formas, alguém poderia dar um help ai? Alguma caminho diferente que eu possa tomar?

Grato!
WJSF

3 Respostas

R
...
boolean auth = session.getAttribute("usrSession") != null;   
Usuario objUsuario = new Usuario();   
objUsuario = (Usuario) session.getAttribute("userSession");  //Voce verificou se o atributo "usrSession" esta na sessao e depois vc tentou recupera-lo com "userSession"
wender.jean

Na verdade dentro do PhaseListener ele consegue pegar esse cara, ate fiz pra redirecionar o cara pra página de login caso a sessão nao existisse e ele esta funcionando normalmente, mas se tentar pegar em qualquer outra parte do sistema, la no ServiceBean por exemplo,ele retorna nulo, a ideia e obter ele em diversas partes do sistema para ser gravado em banco de dados!

:?

Grato!
WJSF

R

O ideal seria vc recupera-lo em apenas um lugar (bean) e passa-lo como parametros para as demais classes. Imagino que seja algum tipo de auditoria, se for, pesquise sobre filtros.

Criado 20 de maio de 2011
Ultima resposta 20 de mai. de 2011
Respostas 3
Participantes 2