Autenticando em um sistema de Login

2 respostas
R

Pessoal,

Sou iniciante em programaçao java para web, criei uma classe login, na qual usando cookies, permite que usuarios
sejam autenticados. Quando tento fazer o login com o usuario admin (cadastrado no MySLQ) vem a mensagem:

Nao foi possivel conectar com o banco.
Parameter index out of range (1 > of parameters, which is 0)

Tentei diversas formas mas sem sucesso.

Segue abaixo o codigo.

package br.home.livraria;

import java.io.IOException;

import java.io.PrintWriter;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.<em>;

import java.sql.</em>;

/**

  • Servlet implementation class Login
    
    */
    
    public class Login extends HttpServlet {
    
    private static final long serialVersionUID = 1L;
    
    private Connection conn;
    

    /**

    • @see HttpServlet#HttpServlet()
      */
      public Login() {
      super();
      // TODO Auto-generated constructor stub
      }

    /**

    • @see Servlet#init(ServletConfig)
      
      */
      
      public void init(ServletConfig config) throws ServletException {
      
      // TODO Auto-generated method stub
      
      String connectionString = jdbc:mysql://localhost/livraria?user=root&password=1234;
      
      try {
           Class.forName("com.mysql.jdbc.Driver");
           conn = DriverManager.getConnection(connectionString);
       }
       catch (ClassNotFoundException err) {
           System.out.println("Nao foi possivel carregar o Driver");
           System.out.println(err.getMessage());
       }
      
       catch (SQLException err){
           System.out.println("Erro ao estabelecer a conexao com o banco de dados");
           System.out.println(err.getMessage());
       }
      

      }

    /**

    • @see Servlet#destroy()
      */
      public void destroy() {
      // TODO Auto-generated method stub
      }

    /**

    • @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
      
      */
      
      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      
      // TODO Auto-generated method stub
      
      PrintWriter out = response.getWriter();
      
      String html = “”;
      
      String login = “”;
      
      Cookie cookies[] = request.getCookies();
      
      if (cookies != null){
      
      for (int i = 0 ; i < cookies.length; i++){
      
      if (cookies[i].getName().equals(login)== true){
      
      login = cookies[i].getValue();
      
      } //fecha segundo if
      
      } //fecha for
      

      } //fecha primeiro if

      html += “”;
      
      html += “”;
      
      html += Biblioteca Online;
      
      html += “”;
      
      html += “”;
      
      html += “”;
      
      html += Login:
      ;
      
      html += Senha:<input type=password id=password name=password
      ;
      
      html += 
      ;
      
      html += “”;
      
      html += “”;
      
      out.print(html);	
      
      }
      

    /**

    • @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
      
      */
      
      protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      
      // TODO Auto-generated method stub
      
      PrintWriter out = response.getWriter();
      
      PreparedStatement smt;
      
      Cookie cookie;
      
      ResultSet rs;
      
      String sql = “select * from tb_usuario where login = ‘?’ and password = password(’?’)”;
      
      String html = “”;
      
      html += “”;
      
      html += “”;
      
      try {
      
      if (request.getParameter(“login”)!= null && request.getParameter(“password”)!= null) {
      
      smt = conn.prepareStatement(sql);
      
      smt.setString(1, request.getParameter(“login”));
      
      smt.setString(2, request.getParameter(“password”));
      
      rs = smt.executeQuery();
      
      if (rs.next()){
           	cookie = new Cookie("login", request.getParameter("login"));
           	response.addCookie(cookie);
           	response.sendRedirect("sucesso.html");
           	
           	/* Pratica 3
           	HttpSession session = request.getSession();
           	session.setAttribute("UserName",rs.getString("Nome"));
           	response.sendRedirect("CadastraLivro");*/
           }
           else {
           	html += "usuario ou senha invalidos";
           }
           rs.close();
           smt.close();
           
       } else{
       	html += "usuario ou senha nao informada !";
           }
           
       } catch (SQLException err){
       	html += "Nao foi possivel conectar com o banco<br><br>";
       	html += err.getMessage();
       }
       html+= "</body>";
       html+= "</html>";
       out.print(html);
       out.close();           
        }
      

    }

Att,

Faria

2 Respostas

ctosin

Olá,

Tente remover as aspas simples da sua query. Ficaria assim:

String sql = "select * from tb_usuario where login = ? and password = password(?)";

Quando você chama o setString() do PreparedStatement ele já lida automaticamente com as aspas simples, então você não precisa se preocupar com isso.

Outra coisa que eu gostaria de falar é que você deve tomar muito cuidado com a forma como você está programando este servlet. Lembre-se de que os servlets são normalmente compartilhados entre as requisições. Desta forma, declarar o objeto da sua conexão com o banco de dados como um atributo do servlet é extremamente perigoso e não recomendado em nenhuma situação (ainda mais em se tratando de um recurso como uma conexão). Para fins de aprendizagem tudo bem (e acho que é esse seu objetivo), mas só neste caso. Só quis te dar esse toque :wink:

Abraço

R

Oi Ctosin,

Funcionou após retirar as aspas.
A idéia é mais para aprendizado mesmo.
Mas caso eu goste de programar em Java, vou segui a dica que voce passou.

Obrigado !

Faria

Criado 12 de março de 2010
Ultima resposta 13 de mar. de 2010
Respostas 2
Participantes 2