Galera, estou desenvolvendo uma aplicação com JSF 2.0 e Primefaces, e preciso fazer um tipo de controle de acesso.
Não posso deixar o mesmo usuário se logar duas vezes simultaneamente no sistema, seja em 2 browsers ou 2 máquinas distintas.
Não gostaria de fazer isso fazendo consulta ao banco de dados.
Vcs sabem uma solução melhor pra fazer isso?
use JAAS
Esse tipo de requisito que lhe passaram, se implementado “ao pé da letra”, tem o seguinte problema. (Eu digo isso porque já passei por isso - e isso foi muito difícil de resolver )
Suponha que o usuário, por algum motivo, feche o browser sem se deslogar da aplicação (por exemplo, pode ser que o browser trave, ou coisa parecida).
Se não fizer as coisas direito, ele só poderá se conectar novamente se a aplicação Web for reiniciada, o que é sempre desagradável.
Se você adotar uma outra política (do tipo “se fulano se logar novamente, encerra a outra sessão que já estava rodando” - é melhor porque evita que ele fique sem acesso ao sistema, por exemplo, porque o browser travou ou coisa parecida.
De qualquer forma, isso é um tipo de controle que você pode deixar em algum objeto no escopo de aplicação, não no de sessão (é óbvio) nem de página (mais óbvio ainda).
ops, desculpe. Entendi errado. [=
Você pode implementar um HttpSesionListener, todo vez que uma sessão for criada você verifica se essa sessão já existe em uma lista, se existir você não deixa entrar, se não adiciona a mesma na lista.
Desse jeito você não terá o problema que o entanglement falou, pois quando a sessão cair, você retira ela da lista, aí o usuário poderá entrar novamente.
Att
Sei. Quanto tempo leva para uma sessão cair?
Se ela cair muito rapidamente (porque o usuário está parado por 5 minutos em uma tela, pensando) você vai toda hora ficar redirecionando o usuário para a tela de login, o que é desagradável.
Se ela demorar muito para cair, então se o usuário conseguir abrir um novo browser em 3 minutos, em vez de conseguir logar de novo, vai tomar a mensagem de que “não pode logar”, o que é desagradável. É melhor tomar uma mensagem de “já está logado em outra sessão, quer deslogar a outra sessão em andamento…” ou coisa parecida.
O tempo da sessão, você configura no web.xml, você terá que calcular uma média do tempo.
Obrigado pelas dicas, galera…ajudaram bastante =))