Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Controle de usuários logados

Boa tarde pessoal.

Eu preciso controlar por empresa a quantidade de usuários logados simultâneamente. Conforme o valor pago por eles terá uma limitação. Mas não vou limitar a quantidade de logins que ele pode cadastrar. Somente a quantidade de acessos simultâneos. Eu pensei em criar um bean ApplicationScoped que a cada login eu verifico quem está conectado por empresa e caso ele possa logar eu incluo ele num map para poder consultar depois. Se o usuário clicar em logout eu tiro ele do map. Só que 1% ou menos dos usuários clicam em logout. Todos fecham o browser direto.

Com o cenário acima como eu posso criar um controle efetivo para isso? Eu dei uma olhada no Spring Security mas pelo que li ele não controla isso.

Obrigado.

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
5 respostas

Fala Claudio, tudo bem?

Pelo backend não é possível fazer isso pois é necessário fazer uma requisição para encerrar a sessão ou esperar pelo timeout do servidor.

O que pode ser feito no frontend é chamar via js o evento onbeforeunload no elemento window e passar a função de logoff.

Para saber mais sobre o evento, segue o link : https://www.w3schools.com/jsref/event_onbeforeunload.asp

Abraço

Obrigado pela resposta Samir.

Eu já tinha pesquisado esse evento e ele é altamente desaconselhado para o que eu preciso (pelo menos no stackoverflow o @BalusC sempre frisa isso que não funciona para métodos backing bean).

Deixa eu complementar porque não respondi direito. Você me informou que não dava pra fazer pelo backend e eu desconsiderei na resposta. Via js da maneira que você me falou eu não vou conseguir controlar os usuários logados. Ainda que o js chame alguma função se ela não passar pelos meus beans não vai me ajudar. Pelo que eu estou vendo a única solução será eu limitar a quantidade de logins criados em conformidade com o plano escolhido. Se alguém tentar logar com o mesmo login em máquinas diferentes eu invalido o login mais antigo porque a hash de acesso dele será diferente.

Obrigado pela ajuda.

solução!

Uma outra solução é diminuir o tempo do timeout do servidor e encerrar a sessão do usuário mais rápido, assim qdo ele fechar o browser vai ficar sem atividade e deslogar. Além disso, quando atingir o limite vc pode enviar uma msg com os usuários logados dizendo que esse novo usuário precisa esperar alguém deslogar, isso talvez mude a cultura da empresa para apertar o botão deslogar. Claro, tudo isso depende da sua regra de negócio e etc, mas talvez seja uma outra solução.

Diminuir o timeout me traz dor de cabeça. Eu tinha com 10 minutos e os usuários reclamavam que toda hora tinham que ficar relogando. Vou fazer da maneira que eu tinha pensado. Vou limitar a quantidade de logins que o cliente pode criar com base no plano escolhido por ele.

Mais uma vez obrigado pela ajuda.