Usuário entrando na sessão de outro usuário em APP 24x7

17 respostas
boby28

Prezados estou precisando muito da ajuda de vcs segue arquitetura e cenário do problema:
Aplicação rodando em um servidor:

RedHat
32gb ram
8 processadores
Apache tomcat 7.0.14

Cenário:
É uma aplicação crítica que funciona com 600 usuários simultâneos em média. Há + ou - 6 meses aconteceu que usuários estavam ligando dizendo que quando se logavam na app aparecia o nome e os dados de outros usuários, ou seja, ao fazer login, o usuário estava entrando no perfil de outro usuário, ao analisarmos no adm do tomcat vimos que existiam as sessões dos dois usuários ativas mas com ids diferentes. Então pesquisamos e decidimos mudar o tomcat da Versão 6.0.26 para a 7.0.14.

Após 3 meses parecia que o problema tinha sido corrigido, mas os usuários voltaram a ligar relatando o mesmo problema.

De acordo com o perfil da aplicação isso é uma falha gravíssima.

Alguém pode dar uma luz? :frowning:

17 Respostas

FernandoFranzini

Para mim isso é normal…problema seria 2 sessões com o mesmo id!! kkkkkkk Acredito que não é a raiz problema…
Pode ser problemas de escopo de objetos dentro da aplicação…o servidor não tem nada haver com isso…erro de programador kkk

maior_abandonado

e como vcs deixam esses dados?

em um objeto na sessão do usuário?

como inserem la?

poste seu código de omo insere na sessão se for esse o caso e como obtém estes dados…

jpjcjbr

Verifique se vocês utilizam algum tipo de threadlocal para armazenar valores, tive problemas com isso uma certa vez… os objetos não eram removidos do threadlocal e a mesma thread atendia requisicoes de varios usuarios, causando inconsistencias deste tipo…

flws

boby28

Obrigado pela celeridade amigos, segue código onde pegamos os dados da sessão e onde recuperamos estes dados e mostramos no jsp.

//coloca na sessão
HttpSession session = request.getSession();

session.setMaxInactiveInterval(xx.getInstance().getTempoExpiraSessao());
	session.setAttribute("nome", logon.getNome());
	session.setAttribute("login", logon.getLogin());
	session.setAttribute("grupo", logon.getGrupo());

	
	session.setAttribute("usuario", usuario);

//recupera da sessão

Usuario usuario = (Usuario)request.getSession(false).getAttribute(“usuario”);

Será que um synchronized no método resolve?

GRATO!

FernandoFranzini

Eu acho que esse não é o erro tb…
Não tem como dar erro nesse código pq a container garante que uma sessão não tem acesso a outra…
Vc disse que “estavam ligando dizendo que quando se logavam na app aparecia o nome e os dados de outros usuários,”
Isso pode ser cache de navegador…

boby28

Caro Fernando, são acessos de lugares físicos diferentes, como pode ser o cache do novegador?

leoramos

Perguntas:

  • tu usas DWR? Se estiver, confere o crossDomainSecurity;
  • o perfil dos dois usuários é diferente? Se for, tenta fazer com UM uma operação de OUTRO, pra ver se funciona ou se bloqueia. Motivo: talvez teu problema esteja nas pesquisas de usuário / perfil do teu sistema, e não nas sessões.
gilmaslima

Qual o framework MVC você está usando?

FernandoFranzini

Se for assim realmente não tem como…mas como vc não detalhou o cenário…kkkkk
Aquele código que vc mandou diz que é impossível de acontecer…pq o container não da acesso a vários objetos de sessões diferentes no mesmo http request…
Provavelmente é outra coisa…
Vc alterou alguma coisa do tomcat como Single Sign On ou clusters ??

Dan_xD

Boa Tarde Amigo.

Já verificou a sua camada de Acesso?

Cheguei a ver um problema semelhante uma vez, o problema estava na camada de acesso ao Banco, existia um determinado caso aonde por falta de alguns tratamentos, um usuario conseguia utilizar a sessão de outro usuario, devido a uma programação um tanto quanto errônea no SingleTown que fazia o acesso ao banco.

boby28

Caro gilmaslima usamos:
Spring
Struts…

boby28

Se for assim realmente não tem como…mas como vc não detalhou o cenário…kkkkk
Aquele código que vc mandou diz que é impossível de acontecer…pq o container não da acesso a vários objetos de sessões diferentes no mesmo http request…
Provavelmente é outra coisa…
Vc alterou alguma coisa do tomcat como Single Sign On ou clusters ??

Fernando comentado assim:

<!--
    <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
    -->
FernandoFranzini

Complicado de ajudar assim de longe
Aparentemente a aplicação esta ok…e o tomcat tb é esta ok…mas existe o problema! Algo esta errado kkkk
…eu teria que depurar o código para ver…

boby28

Dan xD:
Boa Tarde Amigo.

Já verificou a sua camada de Acesso?

Cheguei a ver um problema semelhante uma vez, o problema estava na camada de acesso ao Banco, existia um determinado caso aonde por falta de alguns tratamentos, um usuario conseguia utilizar a sessão de outro usuario, devido a uma programação um tanto quanto errônea no SingleTown que fazia o acesso ao banco.

Dan vc teria mais alguma observação, onde seria esse controle da camada de acesso? no server.xml do tomcat? o que seria configurado? ainda estamos com o problema e não conseguimos simular esse problema em homologação, o problema só da em produção :frowning:

Abraços !!

J

Bom dia senhores,

Estou tendo exatamente o mesmo problema relatado nesse tópico e não sei mais o que fazer.
A aplicação roda perfeitamente até que alguns usuários tentam acessá - la simultaneamente e, ao que me parece, o tomcat “se perde” nas sessões abertas e mostra dados de outra sessão aberta.
Meu TomCat é o 7.0.34, estou usando JSF e o login do usuário eu pego pela rede, usando a biblioteca Jcifs.
Alguém tem alguma idéia do que possa ser? já debuguei todo o meu código, o escopo está correto e não consigo simular o problema em cenário de testes, apenas em produção.

Muito obrigada!

gomesrod

Um primeiro passo seria verificar se em algum momento a aplicação está usando variáveis não-locais em um servlet, ou variáveis static em qualquer classe. Certamente isso causaria problemas de “mistura” de dados de sessão.

FernandoFranzini

Eu aposto 100% que é erro relacionado com referências de objetos compartilhadas…
Veja se vc não esta compartilhando referencias nas sessão que pode ocasionar os erros citados…

Criado 19 de julho de 2011
Ultima resposta 13 de fev. de 2013
Respostas 17
Participantes 9