Probleminha em fazer login

4 respostas
Diana

Olá pessoal, fiz esse servlet para efetuar login e inicialmente achei que o JavaScript que eu tinha colocado nele estava causando problema…pq toda vez que eu entro com login e senha as vezes é como se ele naum conseguisse criar a sessão na primeira vez e me pedisse novamente para entrar com login e senha (não é RetryLogin)…e outras vezes ele passa direto…não sei exatamente o que pode causar isso…vou colocar o código que eu fiz para que vcs possam me dar uma opinião…

public class SessionLogin extends HttpServlet{
	public static String privi="";
	public static final String LOGIN="select privilegios from os_usuarios where login=? and senha=?";
	
	
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{
		PrintWriter out=response.getWriter(); 
		response.setContentType("text/html");
		String userName=request.getParameter("login");
		String passWord=request.getParameter("senha");
		try {
			if(login(userName,passWord)){
				//enviando cookie para o browser
				HttpSession session=request.getSession(true);
				session.setAttribute("logado",session.getId());
				session.setAttribute("user",userName);
				System.out.println(userName);
				session.setAttribute("IP",request.getRemoteHost());
				session.setAttribute("privilegios",privi);
							
				response.sendRedirect("http://200.215.114.175/OS/frame.jsp");
								System.out.println("Se chegou aqui eh porque logou");
			}else{
				response.sendRedirect("http://200.215.114.175/OS/RetryLogin.jsp");
				System.out.println("Se chegou aqui eh porque nao logou");
			}
		} catch (MsiException e) {
			e.printStackTrace();
		}
   		out.close();
   		out.flush();
	}
	public static boolean login(String userName, String passWord) throws MsiException{
		Connection conn=null;
		PreparedStatement pstmt=null;
		ResultSet rs=null;
		try{
			conn=Conexao.getConexao();
			pstmt=conn.prepareStatement(LOGIN);
			pstmt.setString(1,userName);
			pstmt.setString(2,passWord);		
			rs=pstmt.executeQuery();
			if(rs.next()){
				privi=rs.getString("privilegios");
				return true;
			}
		}catch(SQLException e){
			e.printStackTrace();
			throw new MsiException("Erro tentando logar"+"SessionLogin",e);
		}finally{
			Conexao.closeAll(conn,pstmt,rs);
		}
		return false;
	}
		
}

[]'s

4 Respostas

tRuNkSnEt

Gatinha… 8)

Tem uma porrada de regras erradas … acho melhor vc rever todo esse codigo … Tenho impressão que eu ja vi ess codigo em um livro ai vc parece que tentou adaptar ai se perdeu toda…

algumas coisas:

Vc pegou so valores do campo userName e passWord e jogou em variaveis, mas vc nem chegou a usar ele na consulta sql. Sendo que sua consulta sql esta sendo passado um valor que vc botou e nao um valor que foi pegado no campo.

public static final String LOGIN=“select privilegios from os_usuarios where login=? and senha=?”;

poderia usa algo assim
String LOGIN=“select privilegios from os_usuarios where login=’”+userName+"’ and senha=’"+passWord+"’ ";
vamos utilizar as variaveis :slight_smile:

:arrow:

try{

conn=Conexao.getConexao();

pstmt=conn.prepareStatement(LOGIN);

pstmt.setString(1,userName);

pstmt.setString(2,passWord);

rs=pstmt.executeQuery();

if(rs.next()){

privi=rs.getString(privilegios);

return true;

}

conn = Conexao.getConnection() --> no ingreisss :o

olha so … vc ja pegou o usuario e a senha e ja mandou para o cookie sem mesmo antes de testar se tinha algo no resultset (se tivesse algo e pq existe o usuario e nao tive e pq nao existe)

if(rs.next()){ 
        privi=rs.getString("privilegios"); 
        pstmt.setString(1,userName); 
        pstmt.setString(2,passWord); 
        return true;

esse servlet tambem so serveria para validar o usuario que fosse passado pela tela login…
Entao se o usuario for bem sucedido ele chama a proxima pagina, mas se depois dessa pagina tiver outra pagina??? ai seu servlet nao faz controle, ou seja ele pode acessar via browser direto…

Bom ta ai alguma furadas que achei mas drasticas, veja sobre esse topicos da uma LIDA no seu codigo… veja que tem algumas coisas nao tem sentido. Nao quero te dar a resposta por completo porque eu quero que vc estude…

Beijunda qualquer coisa estamos ai!!!

F

1 - Ela não se perdeu não

2 - String LOGIN=“select privilegios from os_usuarios where login=’”+userName+"’ and senha=’"+passWord+"’ ";
é horrivel, String é objeto imutável não se soma, se quiser fazer assim usa StringBuffer.

3 - A query dela esta ok pra preparedStatement

4 - Ela checa no login(…) se tem algo no resultSet

5 - Diana, posta a pagina pra eu dar uma olhada

urubatan

bahh o tRuNkSnEt, não leva mau, mas tu só falou besteira ali,

Diana o teu código parece estar correto,
o que pode estar acontecendo é que você esta utilizando uma variável de instancia (privi) em um servlet, que não deve conter este tip ode variaveis por ele funciona de modo multithread, isto é, pode atender mais de uma requisição ao mesmo tempo.

este não é o problema com a variável login pois ela é uma constante, então ela ta OK ali.

agora para ter realmente certeza do fluxo de dados, que esta ocorrendo o erro, só depurando ou então se vc colocar alguns println no meio do código :smiley:

mas da uma olhada naquela variavel global ali que ela pode estar te causando problemas, e se não ta causando agora vai causar depois.

tenta trocar por um StringBuffer como parametro da função de login, ai tu adiciona os privilegios no stringbuffer :smiley:

tRuNkSnEt

:oops:

Criado 8 de outubro de 2004
Ultima resposta 13 de out. de 2004
Respostas 4
Participantes 4