Sessão no tomcat

2 respostas
C

Bom dia

Galera, estou com 1 elefante branco…

Criei 1 sistema de login, que se o usuário digitar a senha corretamente, ele preenche algumas variáveis de sessão, caso contrario, eu invalido a sessão.

HttpSession session = request.getSession();
session.invalidate();

Bom na minha máquina local, está funcionando perfeitamente, mas quando eu publiquei no meu servidor, as vezes 1 usuário loga com a senha corretamente, e ele traz alguns dados de outra pessoa, já verifiquei a query, está retornando os dados corretamente do input do login e senha.

Mas está alocando as session erroneamente, está como por exemplo, trazendo de 1 usuário logado (foi o que eu percebi).

Tenho que tratar o servidor tomcat em algum lugar, indicando que vai ser multi-usuário ?

vou postar o código do meu login (controler)

package util.controller;

import java.io.IOException;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;

import javax.servlet.ServletException;
import javax.servlet.http.*;

import util.modulo.*;

public class Login extends HttpServlet 
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		HttpSession session = request.getSession();
		UsuarioBin user = new UsuarioBin();
		try 
		{
			user = UsuarioDao.locUser(request.getParameter("login"),request.getParameter("senha"));
		}
		catch (Exception e) 
		{  
			session.invalidate();
			e.printStackTrace();  
		}
	
		if (request.getParameter("disconnect") != null)
		{
			if ( request.getParameter("disconnect").equals("logout")) 
			{
				session.invalidate();
				response.sendRedirect("login.html");
			}
		}
		else
		{
			if (user != null)
			{
				session.setAttribute("filial"      , user.getFilial());
				session.setAttribute("usuario"     , user.getLogin());
				session.setAttribute("menuLogin"   , user.getMenu());
				session.setAttribute("codVendedor" , user.getCodvend());
				session.setAttribute("nomVendedor" , user.getNomusr());
				session.setAttribute("nomPortal"   , user.getNomportal());
				session.setAttribute("codusr"      , user.getUsrsis());
				session.setAttribute("usrnivel"    , user.getNivel());
				session.setAttribute("usrcc"       , user.getUsrcc());

				DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
				Date data = new Date();
				
				String versao 		 = "1.0.0.1."; 

				session.setAttribute("versao",versao);
				session.setAttribute("data",dateFormat.format(data));

				if (user.getUsrcodcli() != null) 
				{
					session.setAttribute("codcliente", user.getUsrcodcli());
					session.setAttribute("codloja", user.getUsrlojcli());
				}

				ArrayList<MenuBin> pais = new ArrayList<MenuBin>();
				try {
					pais = MenuDao.locMenu(user.getMenu());
					session.setAttribute("menuPai",pais);   
			           
			        response.sendRedirect("index.jsp");   

				} catch (SQLException e) {
					session.invalidate();
					e.printStackTrace();
				}
			}
			else
			{
				session.invalidate();
				response.sendRedirect("login.html");
			}
		}
	}

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
			doPost(request, response);
	}
}

Desde já agradeço a ajuda

Obrigado

Christian

2 Respostas

saninaimayer

Seu sistema tem uma falha. Caso dispare exceção na consulta do seu usuário (linha 27), e o resultando da linha 35 for false, ele sempre entrará na linha 45 mesmo você não tendo o resultado do banco devido ao possível erro, pois, o seu user só será nulo quando o usuário ou a senha forem inválidos, caso dê erro nessa consulta, o user não será nulo, portanto, entrando na condição linha 45.

Agora, não sei se é esse detalhe que percebi que está causando este teu problema.

C

saninaimayer:
Seu sistema tem uma falha. Caso dispare exceção na consulta do seu usuário (linha 27), e o resultando da linha 35 for false, ele sempre entrará na linha 45 mesmo você não tendo o resultado do banco devido ao possível erro, pois, o seu user só será nulo quando o usuário ou a senha forem inválidos, caso dê erro nessa consulta, o user não será nulo, portanto, entrando na condição linha 45.

Agora, não sei se é esse detalhe que percebi que está causando este teu problema.

Opa, existia realmente uma falha, onde o user vinha com dados em branco e não nulo, setei agora nulo na exception.

Porém, esta falha não estava em alterar algo, pois quando o sistema logava, ele trazia outro usuário, e não em branco, mas sim, com todos os dados, no estilo, codigo do vendedor, menus, etc.

Eu debugando no eclipse ele mostrava no sysout todas informação que era do cara que iria logar mesmo no sistema, e não o que ele mostrava.

Já estou pensando em colocar outro container.

Não estou conseguindo resolver este problema, já queimei muito neurônio aqui, e acho que a solução é bem mais simples, porém desconhecida para mim, pois na minha máquina, funciona e nunca ocorreu este problema.

Christian

Criado 15 de maio de 2009
Ultima resposta 15 de mai. de 2009
Respostas 2
Participantes 2