Логин - Сравнение ввода пользователя с базой данных - PullRequest
0 голосов
/ 15 декабря 2011

Я уже некоторое время гуглю и не могу найти ответ на свой вопрос .. а именно: я хочу знать, есть ли метод или способ получить значение базы данных, а затем сравнить его ... я не совсем уверен, как это объяснить ... так что я думаю, я покажу вам, что я получил так далеко за мой код. Кстати, я использую netbean для создания этой программы и использую базу данных odbc (mircosoft access). Я также использую try catch в коде, но не знаю, как сделать так, чтобы он показывал ..

Программа, представленная ниже, на самом деле не работает так, как я хочу, потому что у меня проблемы со сравнением. Заранее спасибо.

if(request.getParameter("username")!=null && request.getParameter("username") !=""
        && request.getParameter("password")!=null && request.getParameter("password")!=""){ 

    String user = request.getParameter("username").toString();
    String pass = request.getParameter("password").toString();

    String check = "SELECT AccountType FROM Testing WHERE Username='"+user+"' AND Password ='"+pass+"'";
    rs = stmt.executeQuery(check); 
    String info = rs.getString(check); // trying to get the AccountType and store it into a string

    while(rs.next()){
        if(info != null && info !=""){  //checks to see if the account exist in the database                
            if(info.equals("Admin")){ //checks to see if AccountType is "Admin"
                    response.sendRedirect("AdminConsole.jsp"); 
            }else
                response.sendRedirect("UserConsole.jsp");
        }else
            response.sendRedirect("ErrorPage2.jsp");
    }
}else
    response.sendRedirect("ErrorPage.jsp");

connection.close();

}

1 Ответ

0 голосов
/ 15 декабря 2011

Пожалуйста, пожалуйста, не делайте этого. Вы не должны выполнять SQL изнутри кода, а также не должны хранить пароли в виде простого текста. Что вы должны сделать, это вызвать параметризованную процедуру, которая принимает имя пользователя / пароль в качестве аргументов, а затем возвращает роли (или все, что вы хотите). Пароль все еще должен быть хеширован как минимум.

Примерно так: http://www.daniweb.com/software-development/csharp/threads/87556

В MS Access хранимая процедура называется хранимым запросом: http://msdn.microsoft.com/en-us/library/aa140021(v=office.10).aspx

Соответствующие части:

Proc:


create procedure ValidateUserLogin
  @UserName varchar(30)
  , @Password varchar(30)
as
begin
  if exists (select * from UsersTable as ut
    where ut.UserName = @UserName AND ut.Password = @Password)
    select 1;
  else
    select 0;
end

Класс


private bool IsValidatedUser( string username, string password ) {
  try {
    bool rv = false;

    using ( SqlConnection con = new SqlConnection( connectionString ) ) {
      using ( SqlCommand cmd = new SqlCommand() ) {
        con.Open();

        cmd.Connection = con;
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.CommandText = "ValidateUserLogin";

        cmd.Parameters.Add( "@UserName", SqlDbType.VarChar, 30 ).Value = username;
        cmd.Parameters.Add( "@Password", SqlDbType.VarChar, 30 ).Value = password;

        rv = Convert.ToBoolean( cmd.ExecuteScalar() );

        con.Close();
      }
    }

    return rv;
  } 
catch ( Exception ex ) {
    // Log errors
    throw;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...