Ich versuche zur Validierung username und Passwort
Ich versuche, um sicherzustellen, dass, wenn ein Benutzer gibt Benutzername & Passwort-Authentifizierung erfolgt durch überprüfung, wenn der Eingang entspricht einer Zeile in der user-Tabelle. Hier ist der code so weit: Es reagiert nicht, wenn die Schaltfläche login klicken. Bitte vorschlagen, wie kann ich es einstellen das richtige. Dank
private void dbConnection()
{
try
{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/maths_tutor", "root", "jesus");
Statement stmt = conn.createStatement();
String CHECK_USER = "SELECT * FROM records WHERE username = '"+this.txtUser+"' AND password = '"+this.txtPass+"'";
ResultSet rs = stmt.executeQuery(CHECK_USER);
while(rs.next())
{
String user = txtUser.getText();
String pass = txtPass.getText();
if(user.equals(rs.getString("username")))
{
if(pass.equals(rs.getString("password")))
{
this.dispose();
new AboutTo().setVisible(true);
}
else JOptionPane.showMessageDialog(null, "Invalid Password");
}
else JOptionPane.showMessageDialog(null, "Invalid Username or Password");
}
stmt.close();
rs.close();
conn.close();
}
catch(SQLException | ClassNotFoundException er)
{
JOptionPane.showMessageDialog(null, "Exception:\n" + er.toString());
}
}
- was ist die Ausnahme, die Sie bekommen?
- Warum sind Sie zur überprüfung, dass das SQL für die Datenbank funktioniert? Wenn Sie ein Ergebnis bekommen, es war ein Spiel, die Sie nicht brauchen, um es zu überprüfen. BTW, Wenn Sie nicht bekommen ein Spiel, spielt es keine Rückkehr einen zufälligen Datensatz, die nicht übereinstimmen, es gibt nichts zurück, so dass Sie verwenden sollten
if(rs.next()) { ok } else { not ok }
- Dieses Stück code nur vergleicht den Benutzernamen und Passwort mit der DB-Daten. Wo ist der code, der diese Methode aufruft, klicken Sie auf der login-button?!
- Haben Sie versucht, den code zu Debuggen, wenn der login-button geklickt wird. Überprüfen Sie die Werte für Benutzername und Kennwort und sehen, ob die Logik richtig ist.
- Erste:- "JOptionPane.showMessageDialog(null, "Passwort Ungültig")" dieses Stück code ist nicht erforderlich, da Ihr nur bekommen, resultSet, wenn es erfüllt sowohl Benutzername und Kennwort entweder können Sie zwei verschiedene Anweisungen, wo Sie Benutzername und Passwort getrennt voneinander. Zweitens:- Sie müssen zunächst prüfen, ob Ihr irgendeine Antwort, wenn Sie auf die Schaltfläche klicken und dann überprüfen, ob die Datenbank-Konnektivität ist in Ordnung, die...
Du musst angemeldet sein, um einen Kommentar abzugeben.
haben Sie bestanden Benutzername & Passwort in der sql-Abfrage, so dass Sie gehen, während der block nur, wenn Benutzername Und Kennwort übereinstimmen ...
soll man machen sql querylike diese
String CHECK_USER = "SELECT * FROM Einträge";
oder Sie verwenden können, wenn block wie diesem
if(rs.die next () -
{
//login erfolgreich code
}
sonst
{
//login-fail
}
Grundsätzlich, die Logik ist falsch.
Was Sie tun, ist etwa dieser.
Holen Sie sich einen Benutzernamen und ein Kennwort von dem Benutzer.
Bitten, die Datenbank für alle Einträge, für die der Benutzername entspricht der angegebenen Benutzernamen und das Passwort entspricht dem Passwort.
Für jeden derartigen Rekord:
Testen, ob der Benutzername übereinstimmt, und öffnen Sie einen dialog, wenn es nicht mit. Das wird nicht passieren ..., weil Sie nur ausgewählte Datensätze mit diesem Benutzernamen.
Testen, ob das Passwort passt, und öffnen Sie einen dialog, wenn es nicht mit. Das wird nicht passieren ..., weil Sie nur ausgewählte Datensätze mit diesem Passwort.
Wirklich das, was Sie machen sollten ist:
Holen Sie sich einen Benutzernamen und ein Kennwort von dem Benutzer.
Wählen Sie die Datensätze, die mit der Benutzer-name und Passwort.
Print eine Nachricht, wenn die Anzahl von Datensätzen, die Sie abgestimmt ist null.
Ich sollte auch darauf hinweisen, einige andere Dinge:
Aufspringen ein Dialogfeld zu sagen, der Benutzer seinen Benutzer-name /Passwort falsch sind, ist neben dem Punkt. Was Sie wirklich tun müssen, ist sagen etwas anderes in Ihrem server, dass die Anmeldung fehlgeschlagen ist.
Wenn der Benutzer bekommt nur der username oder nur das Passwort falsch ist, sollten Sie nicht bieten ihm alle hinweisen, dass man richtig war. Tun, die es einfacher macht für "the bad guy" zu arbeiten, die richtige Kombination.
Speicherung der Passwörter im Klartext in einer Datenbank ist eine Schlechte Praxis. Am besten speichern ausgesät hashes der Passwörter ... und die Nutzung einer kryptographisch starken Hash-Funktion.
Haben Sie vergessen zu nennen
getText()
auftxtUser
undtxtPass
.Dies ist, wie man Sie beheben könnte Ihre Abfrage:
Sollten Sie beachten, dass die Verkettung von raw-input-text-Abfragen wird geöffnet Anfälligkeit für SQL-injection. Sollten Sie verwenden
PreparedStatement
statt, so dass die Eingabe von text wird korrekt maskiert.Folgende ist ein Weg, um dies zu implementieren, richtig, jedoch fehlen die folgenden Dinge, die sorgen machen sollte, zu Ihnen:
.
Den möglichen Fehler wäre in der Nähe dieser Linie
stellen Sie zunächst sicher, dass Sie legen Sie den Klassenpfad und fügte hinzu, der mysql-Treiber zum Projekt
zweitens möchte ich im folgenden statt der oben genannten, in der Tat, warum tun Sie die Dinge machen, zu viel komplexe?!
und die Letzte Sache ist Vorsicht über die Verwendung dieser wie der code
so, hier ist das system bereit für Injektion.
also die gute Art und Weise wäre, wie dieses, Parameter.
EDIT :
durch die Art und Weise, gibt es keine Notwendigkeit für die Iteration über die Ergebnismenge! einfach rufen Sie einfach die
next()
Methode, wenn es den Wert true zurück, so dass es bedeutet, dass der Benutzer eingegeben hat, die richtige user/pass, sonst nichts anderes.