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

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:

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

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…

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

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!

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…

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

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.

Qual o framework MVC você está usando?

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 ??

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.

Caro gilmaslima usamos:
Spring
Struts…

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 ??[/quote]

Fernando comentado assim:

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

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…

[quote=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.[/quote]

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 !!

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!

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.

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…