Não consigo pegar o usuário logado

09/05/2011

0

Esse é o erro que dá, quando eu vou redirecionar para uma nova página
javax.servlet.ServletException: org.apache.catalina.session.StandardSessionFacade cannot be cast to br.com.mosaicodigital.modelo.HttpSession
root cause 

java.lang.ClassCastException: org.apache.catalina.session.StandardSessionFacade cannot be cast to br.com.mosaicodigital.modelo.HttpSession


Não sei o que fazer com essa classe. Essa classe tá aí, porque o eclipse reclamou e sugeriu criar
public class HttpSession {
    public Login getAttribute(String string) {
        //getSession().setAttribute("usuarioLogado", ());
        return null;    }
}

Esse é o código que fiz e carreguei para pegar o usuário logado.
public FacesContext getFacesContext() {
        return FacesContext.getCurrentInstance();
    }    
    public HttpSession getSession() {
        return (HttpSession) getFacesContext().getExternalContext().getSession(false);
    }    
    public List<Escola> findAll() { 
        Login usuario = (Login) getSession().getAttribute("LoginControle");
                
        Query query =  getEntityManager().createQuery("select distinct esc from Escola esc ,Matricula mat" +
                                                      " where mat.idescola = esc.idescola" +
                                                      " and mat.idpessoa =  " + usuario.getPessoa().getIdPessoa() +
                                                      " and mat.situacao = 'A' order by esc.nome");    
             return (List<Escola>) query.getResultList();    
    }


Pjava

Pjava

Responder

Posts

09/05/2011

Davi Costa

Essa classe não era para vc criar, essa classe é da api java servlet-api.jar.
Tente adicionar esse jar ao seu projeto. Geralmente os servidores já deviam ter ele.
Vc tá usando qual servidor?.. O eclipse sugeriu somente criação de classe, ele não pediu para vc fazer nenhum import não?

Att Davi
Responder

10/05/2011

Pjava

Nãom pediu não. Eu uso o GlassFish 3 open source. Eu fui importar esse e deu erro:
import javax.servlet.http.HttpSession; e aí ele sugeriu criar essa classe.Eu não sei porque deu erro no Import. Eu dá o import com HTTP e não http.
Responder

10/05/2011

Davi Costa

Pois faz o seguinte coloca esse jar na sua app, sópara testar:

servlet-api.jar


Att Davi
Responder

10/05/2011

Davi Costa

Sim mais mais uma dúvida na hr de dar opções de soluções ele não apresentou nenhuma opção de import?

Att Davi
Responder

10/05/2011

Pjava

Não, de import nenhuma para essa situação. Para outras sim, como joincolumn e etc... Mas para esse import, do httpsession não.
Responder

10/05/2011

Davi Costa

Pois tenta achar esse jar. servlet-api.jar
E coloca na sua pasta lib
Agoraassim se vc psquisar sobre Spring security não precisria ver isso, além de ser uma solução testada e na minha opnião a melhor nessa situação para java ela te dá alguns recursos a mais  muito bons, e é fácil de usar

att Davi
Responder

10/05/2011

Pjava

retirei a classe HttpSession e agora deu esse erro:
javax.servlet.ServletException: Unresolved compilation problem: The method getSession() from the type ListaEscola refers to the missing type HttpSession root cause java.lang.Error: Unresolved compilation problem: The method getSession() from the type ListaEscola refers to the missing type HttpSession
Eu nunca fiz nada com login, nunca peguei usuário logado, essa é minha dúvida. Em delphi é bem diferente.

Responder

10/05/2011

Pjava

A classe que pega o usuário logado. Agora o que fazer no meu MB? Vou começar a ler o Spring Security, mas até 12:00 tenho q fazer esse login funfar. Depois passo tudo para Spring Security.

[code]public class ListaEscola {
    private List<Escola> escola;
     private EntityManager em;   
         
    public List<Escola> getEscola() {
        return escola;
    }

    public void setEscola(List<Escola> escola) {
        this.escola = escola;
    }
   
    public EntityManager getEm() { 
        return em; 
    } 
    public void setEm(EntityManager em) { 
        this.em = em; 
    } 
   
    protected EntityManager getEntityManager()
    {   
        if (this.em == null)  {
            this.em = EntityManagerFactorySingleton.getInstance().createEntityManager();
        }// throw new IllegalStateException("Erro");     
        return this.em;
    }
   
    /*public Session getSession() {
        EntityManager entityManager;
        return ((Session)entityManager.getDelegate());
    }

     public final Criteria createCriteriaExample(Entity example) {
        Criteria executableCriteria = getSession().createCriteria(example.getClass());
      
        return executableCriteria;
    }*/
   
   
    public FacesContext getFacesContext() {
        return FacesContext.getCurrentInstance();
    }
   
    public HttpSession getSession() {
        return (HttpSession) getFacesContext().getExternalContext().getSession(false);
    }
   
   
    public List<Escola> findAll() {
        Login usuario = (Login) getSession().getAttribute("LoginControle");
               
        Query query =  getEntityManager().createQuery("select distinct esc from Escola esc ,Matricula mat" +
                                                      " where mat.idescola = esc.idescola" +
                                                      " and mat.idpessoa =  " + usuario.getPessoa().getIdPessoa() +
                                                      " and mat.situacao = 'A' order by esc.nome");   
             return (List<Escola>) query.getResultList();
   
    }    
Responder

10/05/2011

Pjava

To fazendo uma salada tremenda. Em realidade na classe login eu só tenho a validação do login. Essa classe aqui em baixo, acho é que eu deveria pegar o id do usuário, certo?
public class LoginDAO extends DAOGenerico<Login> {
    
    public LoginDAO(EntityManager em) {
        super(em);
    } 
    @SuppressWarnings("unchecked")
    public List<Login> buscaLogin(String loginProcurado) {
        
        em.getTransaction().begin();
        
        Query q = em.createQuery("from Login l where l.login = :loginProcurado");
        q.setParameter("loginProcurado", loginProcurado);
        List<Login> listaLogin = q.getResultList(); 
        
        em.getTransaction().commit();        
        return listaLogin;
    }    
}

Responder

10/05/2011

Davi Costa

carao interessante seria vc pegar o usuario e fazer um select filtrando pela login e asenha, caso retorne vazio, vc retorna ao usuário na tela login ou usuário incorretos.

Att Davi
Responder

10/05/2011

Pjava

Sei que é muita pergunta para coisas fáceis, mas há muita coisa que preciso aprender em java. Farei um curso aqui, porque percebi que falta muita coisa para mim. Não entendi o q vc disse, em linguagem técnica. Cara, é uma coisa simples, eu sei, o pegar o login e eu não consigo fazer. Tudo que faço dá erro. Delphi é tão simple, mas vou com Java até o fim.
Responder

10/05/2011

Dyego Carmo

Acho melhor não fazer este cast direto... faz um teste antes com instanceof...
vai evitar bastante dor de cabeca.

Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar