[英]How to verify correctness of login/password JDBC
我正在創建一個非常簡單的ATM機。 我有MySQL DB,其列如:loginID,密碼,錢。 我想更改我的方法,該方法可以在開始時驗證登錄名和密碼的正確性(然后執行某些操作)。 因此,如果登錄名和密碼正確,那么我想收到“登錄成功”或“登錄失敗”消息。現在我總是收到“登錄成功”消息。如何更改?
public static void post () throws Exception{
Scanner sc = new Scanner(System.in);
System.out.println ("please enter user id:");
String userId = sc.nextLine();
System.out.println("please enter password:");
String pass = sc.nextLine();
System.out.println("how much you want to put");
int money = sc.nextInt();
try {
Connection con = ConnectionDB.getConnection();
String sql = "UPDATE `BankDB`.`Info` SET `Money`= ? WHERE `ClientID`= ? AND `ClientPass` = ?";
PreparedStatement posted = con.prepareStatement(sql);
posted.setInt(1, money);
posted.setString(2, userId);
posted.setString(3, pass);
posted.executeUpdate();
con.close();
} catch (Exception e) {
e.printStackTrace();
} finally{
System.out.println("Login was succesful");
}
}
如果我對問題的理解是正確的,則需要檢查update命令是否確實更新了DB中的某些內容。 在這種情況下,您需要從posted.executeUpdate()
獲得結果。 如果大於零,則更新數據庫中的更新記錄,並且用戶名/密碼正確。
即使UPDATE
查詢的WHERE
子句選擇零行,它們也可以工作。 所以你的查詢
UPDATE `BankDB`.`Info` SET `Money`= ? WHERE `ClientID`= ? AND `ClientPass` = ?
如果WHERE
子句的任何部分都不匹配,則不執行任何操作。 但是它仍然成功。
通常,您想要執行此大綱中所示的操作。
SELECT id, password FROM Info WHERE ClientId = ?
UPDATE Info SET Money = Money + ? WHERE id = ?
提供您在第一步中檢索到的id
值。 危險在充滿網絡犯罪分子的世界中,驗證用戶密碼的方式非常危險 。 眾所周知,將純文本密碼存儲在dbms中是您在安全性方面最糟糕的事情。 這是關於php中的密碼哈希處理,但其建議對任何語言均有效。 請閱讀。 http://php.net/manual/zh-cn/faq.passwords.php不要在密碼安全領域重塑輪胎。 請。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.