Поэтому я пытаюсь создать простой чат-мессенджер в Eclipse. В настоящий момент я не понимаю, как сравнить данные входа в систему пользователей с данными, хранящимися в таблице базы данных. У меня есть метод "askName()", который использует имя пользователя и пароль, поэтому для проверки сведений, хранящихся в таблице "Вход" в базе данных, необходимо использовать мой метод "authenticate".
Я искал здесь и во всем Интернете, и нашел много кода, который был полезен для получения идей. Тем не менее, я несколько раз стучал головой об этом, и я все еще очень новичок в программировании, всякая помощь будет принята с благодарностью!
Итак, на данный момент внутри класса Client у меня есть эти методы входа:
public void askName()
{
// get the clients name
boolean b = true;
// loop in case they enter a null name - aint nobody got time for that
while(b == true)
{
out.println("What is your name?");
String name = null;
try {
name = in.readLine();
} catch (IOException e) {
System.out.println("Can't read name");
}
out.println("What is your password?");
String password = null;
try {
password = in.readLine();
} catch (IOException e) {
System.out.println("Can't read password");
}
if(name != null && password != null)
{
if(Authenticate(name, password))
{
this.username = name;
b = false;
out.println("Welcome " + this.username);
} else {
out.println("Invalid username/password combination!");
}
}
else
{
out.println("Please enter a valid username and password. Your name must contain at least one letter");
}
}
}
private boolean Authenticate(String name, String password) { // added by Alex 18/03/14
// Method to check the entered username/password is valid against the database
// No database class at this point
//Database database = new Database();
return database.Authenticate(name, password);
}
Мне удалось реализовать базу данных в классе "MyJDBC", и мне просто нужно выяснить, как использовать мой метод проверки подлинности для проверки деталей. Я использую PostgreSQL. Это текущий запрос, который я сделал для проверки учетных данных "SELECT password FROM userlogin WHERE username = '" + name + "'"
package jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MyJDBC {
public static void main(String args[]) {
System.out.println("PostgreSQL JDBC Connection Testing");
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e) {
System.out.println("Where is your PostgreSQL JDBC Driver? "
+ "Include in your library path!");
e.printStackTrace();
return;
}
System.out.println("PostgreSQL JDBC Driver Registered!");
Connection connection = null;
Statement stmt = null;
try {
connection = DriverManager.getConnection(
"jdbc:postgresql://dbteach2.cs.bham.ac.uk:5432/user",
"username",
"password");
stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery( "SELECT password FROM userlogin WHERE username ='"+name+"'");
while (rs.next()) {
String Username = rs.getString("Username");
String Password = rs.getString("Password");
int sid = rs.getInt("sid");
System.out.println("Username = " + Username);
System.out.println("Password = " + Password);
System.out.println("sid = " + sid);
System.out.println();
}
rs.close();
stmt.close();
connection.close();
} catch (SQLException e) {
System.out.println("Connection Failed! Check output console");
e.printStackTrace();
return;
}
}}
Я не прошу кого-либо сделать мой код, но некоторые советы о том, что я могу сделать/что я делаю неправильно, будут оценены. Если вы хотите увидеть остальную часть моего кода, чтобы попробовать, скажите об этом.
На практике вам явно не следует использовать четкие текстовые пароли, вы должны использовать их и солить. Затем примените тот же хэш и соль к введенному пароходу и сопоставьте их, как я опишу ниже. Довольно прямо.
Как вы просили узнать основной процесс, вот он:
Получите пароль для своего пользовательского userlogin
, userlogin
должен быть unique
поэтому в ResultSet
будет только один кортеж. Если для этого username
пользователя нет строки, пользователь не существует → throw Exception
.
Далее следует сопоставить полученный вами пароль с тем, который пользователь retrievedPw.equals(userEnteredPw)
через retrievedPw.equals(userEnteredPw)
. Если он вернет true, зарегистрируйте пользователя, поскольку его учетные данные верны.
Если дело доходит до соления, я сам немного борется со словом назад, поэтому вы можете прочитать это расследование о солевом передовом опыте.
Мои предложения: