Spring Security Limitar Sessões por Usuário[Resolvido]

15 respostas
P

Bom dia Senhores(as) do GUJ

Algum de vocês já passou pela necessidade de limitar número de sessões por usuário com Spring Security.

Tipo, tenho a necessidade de limitar 1 usuário logado por login, se houver mais de um exibir uma mensagem informando que
já existe uma sessão ativa para aquele usuário e não é possível criar uma nova.

Desde já, brigadão pela atenção !!!

15 Respostas

H

Tem como você limitar isso por filter normal, tem não?

Veja se o cara já está logado, se estiver bloqueie a nova tentativa.

F

Esse é um dos motivos de pq eu desisti do spring security…ele não faz e para vc manualmente adicionar esse serviço no framework é um transtorno…detalhe quando muda a versão, quebra todo seu código.

P

Então …

Não teria como fazer isso via o Spring Security ???

F

Psytheory:
Então …

Não teria como fazer isso via o Spring Security ???

  1. Ele não faz.
  2. Vc vai ter adicionar isso nele.
P

E como eu poderia adicionar essa regra nele ?

F

Estudar a API dele e acrescentar mais um nivel de validação na sequencia de execução do filtro de segurança

N

Aqui eu limitei assim:

<session-management invalid-session-url="/login.jsf?session=1">
			<concurrency-control max-sessions="1" error-if-maximum-exceeded="true" />
		</session-management>

Coloquei esse código dentro do do application context do spring security e resolvi meu problema

P

Boaaa dica nazarenoneto !!! :slight_smile:

Mas desse modo apenas limitaria o número máximo de sessões, certo ?

E se eu tivesse um usuário por exemplo com o nome de user e eu apenas fosse permitir uma sessão para esse user de modo que
se ele deixasse uma sessão aberta em uma máquina e tentasse abrir uma outra sessão em outra máquina sem deslogar da máquina anterior
fosse impedido ?

N

Eu não tenho certeza, mas acho que desse modo, ele faz isso, se você tiver logado em uma maquina, na outra você não consegue logar, até que você faça o logoff na primeira maquina.

P

nazarenoneto,

Você tem razão, faz sim !!! :smiley:

Show de bola a dica, brigadão pelo help !!!

Abração mano

G

Há um tempo atrás eu queria fazer exatamente isso.
O problema é se o usuário não fez logoff, mas simplesmente fechou o browser. A sessão vai continuar ativa até que o tempo definido no session-timeout acabe. Teste isso e nos conte o que acontece.

P

nazarenoneto,

Para fazer essa alteração você precisou alterar algo na tag de logout do springsecurity ?

Pois ao fazer logout não consigo mais realizar o login.

Tentei usar o delete-cookies=“JSESSIONID” na tag do logout, mas retorna erro. =/

P

Hehe …

Erro meu … é necessário configurar o listener no web.xml :smiley:

<listener-class> org.springframework.security.web.session.HttpSessionEventPublisher </listener-class>

D

Por que não usar o padrão de projeto “Singleton” para fazer esse trabalho?

A

davinc131:
Por que não usar o padrão de projeto “Singleton” para fazer esse trabalho?

Eu tenho a impressão de que não funcionaria (e pra mim - e mais um monte de gente também - Singleton é anti-pattern)… você poderia nos mostrar como?

Criado 10 de julho de 2012
Ultima resposta 6 de jun. de 2014
Respostas 15
Participantes 7