2017-07-20 6 views
0

私は非常に簡単なATMマシンを作成しています。私はログインID、パスワード、お金などの列を持つMySQL DBを持っています。私は、ログインとパスワードの正当性を最初から(そして後に何かを)検証できる方法を変更したいと思います。ログインとパスワードが正しい場合ので、私は。どのように私はそれを変更することができますか?ログイン/パスワードの正当性を検証する方法JDBC

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"); 
    } 
} 
+0

例外がスローされたかどうかにかかわらず、finally句が常に実行されます。 – FredK

答えて

1

場合は、 『「今私は常にメッセージを持っている。』成功したログインメッセージ「成功ログイン」または失敗したログインを受信したい私質問の理解が有効であれば、更新コマンドが実際にDB内の何かを更新したことを確認する必要があります この場合、結果はposted.executeUpdate()から取得する必要があります。

+0

ありがとう、これは私が知りたかったものです:) – damianm

0

UPDATEWHERE句がゼロ行を選択してもクエリが機能するため、

UPDATE `BankDB`.`Info` SET `Money`= ? WHERE `ClientID`= ? AND `ClientPass` = ? 

WHERE句のいずれかの部分が何も一致しない場合は何も行いません。しかし、それはまだ成功します。

一般的に、この概要に示されているようなことをしたいと思います。

  1. SELECT id, password FROM Info WHERE ClientId = ?
  2. あなたのWebユーザによって提供される一つの一致のためのパスワードを確認してください。一致しない場合は、トランザクションを拒否します。
  3. UPDATE Info SET Money = Money + ? WHERE id = ?最初の手順で取得した値がidになります。ユーザーのパスワードを検証する

危険あなたの方法は、サイバー犯罪がはびこって、世界で非常に危険なです。 dbmsに平文のパスワードを格納することは、セキュリティに関して最悪のことであることで有名です。これはPHPのパスワードハッシュについてですが、そのアドバイスはどの言語でも有効です。それをお読みください。 http://php.net/manual/en/faq.passwords.phpフラットタイヤをパスワードセキュリティの分野で改革しないでください。お願いします。

関連する問題