Utilizando Session Listener

2 respostas
gui_sv

Galerinhaa, seguinte :

Tenho um pequeno probleminha em mãos. Houve a necessidade de implementar no sistema um controle de usuários.

Ex.: Meu usuario é gui_sv(1) e ja estou conectado, se outra pessoa conectar com o gui_sv(2) a minha sessão cai ! E se eu me reconectar gui_sv(1) o gui_sv(2) cai … e fica assim … um vai derrubando outro…resumindo, somente um login pode ficar onLine.

Estou implementado isto desta maneira…

Qnd alguem se loga eu adiciono em um map o login e o ip do cara !

login.jsp

...
RequestVerifyLicenseServlet.getUsersLogon().put(user.getLogin(), request.getRemoteAddr());
...

Ai esse RequestVerifyLicenseServlet está implementando da seguinte maneira…

RequestVerifiLicenseServlet

import java.util.HashMap;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import br.com.xx.authorization.User;

public class RequestVerifyLicenseServlet implements ServletRequestListener {

    private static HashMap usersLogon = new HashMap();

    public static HashMap getUsersLogon() {
        return usersLogon;
    }

    public void requestInitialized(ServletRequestEvent eventRequest) {
        HttpServletRequest request = (HttpServletRequest) eventRequest.getServletRequest();
        HttpSession session = request.getSession();

        User userOnLine = (User) session.getAttribute("user");

        if(usersLogon != null){
            if(userOnLine != null){
                if(!request.getRemoteAddr().equals(usersLogon.get(userOnLine.getLogin()))){
                    
                    session.removeAttribute("controlSession");

                }
            }
        }
    }

    public void requestDestroyed(ServletRequestEvent eventRequest) {
        // TODO Auto-generated method stub
        
    }

}

Ele funciona da mesma maneira q o SessionCounter, porem estou trabalhando ele a cada request.

E no web.xml adicionei a tag listener.

Blz,

Ai fui testar…esta funcionando legal…se de uma maquina o gui_sv se loga e o outro gui_sv se loga em um outro ip, a minha sessao cai. otimo, é isso que eu quero que aconteça…

Porém, se fizer o seguinte teste … tipo, eu me conectado ai antes de clicar no botao para criar o usuario, alguem “me derruba” ai sem saber clico no botao Criar… a sessao cai … porem ao reconecta o usuario foi criado, e isto nao que aconteça…

Tentei remover os parametros do request, em vão, tentei request = null, em vão …

Alguma ideia de como resolver isto ?!

Obrigado galera …

Se alguem preferir ai vai o msn … [email removido]

Abraços

2 Respostas

Guilherme_Gomes

Acontece isso por que ele ja tem a pagina no ar e está carregada. Que eu imagino, tem 2 saidas:

  1. Adicionar ao seu site um AJAX para que, quando uma pessoa se conecte de um lado e derrube outra, essa é derrubada na hora, ou seja, na tela da outra, mude para alguma área não restrita ou de erro!

  2. Voce adiciona ao método que cria, um recebimento do IP, assim ele verifica se o IP recebido é o mesmo do Map que voce está usando, só pode criar se for igual.

Ajudei?

gui_sv

O Guilherme, obrigado pela resposta,

ajudou, sim … AJAX no momento eu nao sei como trabalhar … e nao tenho tempo hábil pra isto …

o que eu queria evitar é justamente isto, ficar tratando clique a clique, ou seja, clicou no Criar, antes do metodo que insere os dados no Banco, eu faço if(se meu ip igual ao ip do mapa, cria) caso contrario- Logout …

Se for fazer assim, to frito … terei q alterar todo o sistema praticamente…

usei o RequestListener, justamente pra tentar evitar isto…

Obrigado…

Criado 16 de agosto de 2007
Ultima resposta 16 de ago. de 2007
Respostas 2
Participantes 2