1
resposta

Problemas nas sessões de usuários

Quando tenho 2 ou mais usuários logados na aplicação, ocorre o seguinte problema:

  • Usuario 01 logou, coloquei os dados do mesmo na variável de contexto "usuarioLogado".
    • Usuario 02 logou, fiz o mesmo procedimento acima, mas o Usuario 01 continua operando a aplicação. Caso eu queria monitorar os acessos, ou log, vai pegar os dados do ultimo usuário logado, até pesquisei outras formas de implementação, mas segue o meu método de login.
public RedirectView efetuarLogin() {
        System.out.println("Fazendo login do usuario " + this.usuario.getNome());

        FacesContext context = FacesContext.getCurrentInstance();

        try{
            boolean existe = dao.efetuarLogin(this.usuario);
            if (existe) {
                //context.getExternalContext().getSessionMap().put("usuarioLogado", this.usuario);
                HttpSession session = SessionContext.getSession();
                session.setAttribute("usuarioLogado", this.usuario);
                return new RedirectView("_template.xhtml");
            }
        }catch (Exception e) {
            this.error("Usuário não encontrado");
        }

        context.getExternalContext().getFlash().setKeepMessages(true);
        context.addMessage(null, new FacesMessage("Usuário não encontrado"));

        return new RedirectView("login");
    }
1 resposta

Oi Fabrício,

Acho que o problema aconteceu pois você deve ter logado o usuário2 pelo mesmo browser do usuario1.

Como você está guardando o atributo usuarioLogado na sessão, ela será válida para aquele browser, sendo que assim o usuário2 vai sobrescreve-la.

Em uma aplicação real, cada usuário vai acessar o sistema de um computador distinto e esse problema não vai acontecer.

Você pode testar isso também logando cada usuário em um browser separado.