2016-11-04 12 views
0

ユーザー名とパスワードがカンマで区切られたテキストファイルからユーザー名とパスワードを読み取る非常に簡単なプログラムを作成しました。テキストファイルの内容はJavaでの簡単な認証システムの支援

public class Authenticate { 

public void signIn(String username, String password) throws IOException { 

    FileReader fr = new FileReader("location/accounts.txt"); 
    BufferedReader br = new BufferedReader(fr); 

    while (true) {//read file line by line 
     String line = br.readLine(); 
     if (line == null) { 
      break; 
     } 

     String splitByComma = ","; 
     String[] details = line.split(splitByComma); 
     String registeredUser = details[0]; 
     String registeredPass= details[1]; 

    if(username.equals(registeredUser) && password.equals(registeredPass)){ 
     System.out.println("signed in successfully!"); 
    } 
    else{ 
     System.out.println("sign in failed"); 
    } 

    } 
    br.close(); 

} 

}

私を次のように私のJavaアプリケーションが書かれているアレックス、1234
デビッド、5678


accounts.txt次
が含まれていますプログラムを呼び出したAppクラス:

public class App { 

public static void main(String[] args) throws IOException { 

    Register register = new Register("location/accounts.txt"); 

    Authenticate auth = new Authenticate(); 

    auth.signIn("David", "5678"); 
} 

}

問題は、私は、例えば、方法の「アレックス」「1234」に渡すと、出力が
正常に署名されています!
失敗

ログインして、私は「デービッド」「5678に渡すとき、」私は正常に署名しなかった

看板を入手!

入力した資格情報に応じて、アプリケーションで「サインインが正常に完了」と「サインインが失敗しました」と出力されるようにします。

多くの感謝!

+1

は単純に文字列変数を作成します。=は「失敗したサインイン」 文字列の結果。あなたのループの前に。その結果が見つかった場合は、結果を変更します。ループの後に結果変数をコンソール出力に書き出します。さらに、あなたが見つけたときに休憩をすることもできます - あなたが一致を見つけたら残りの部分を読むためのポイントはありません – Gildraths

+0

私は問題をよりよく理解しています。ファイルをループしていて、一致しないユーザー名とパスワードを見つけるたびに、「サインインが失敗しました」というメッセージが表示され、最後にユーザー名とパスワードが見つかるまで「成功しました」というメッセージが表示されます。n – BigAl1992

+0

ブレーク;コンソールの出力が成功した後でも、 – Gildraths

答えて

1

これは、異なる値でメソッドを2回呼び出すことを意味します。あなたが私たちに提供していない呼び出しコードを確認してください。

その他の発言:

深刻な認証のためにこのような何かを考慮しないでください。パスワードは、ファイル内で少なくともハッシュされる必要があります(たとえば、BCryptを使用)。業界独自の認証ソリューションを提供する多くのフレームワークがあります。これらのソリューションは、「独自のもの」の代わりに使用する必要があります。

あなたはこれらのいずれかの方法でリソースを閉じる必要があります:finallyブロックで

1):

try (BufferedReader br = new BufferedReader(...)) {  
    // do stuff 
} 
:Javaの8のtry-と資源イディオムを使用して

BufferedReader br = null; 
try { 
    br = new BufferedReader(...); 
    // do stuff 
} 
finally {  
    if (br != null) { 
     br.close(); 
    } 
} 

2)

(実行時環境によってBufferedReaderが自動的に閉じられます)

あなたのexa上記の値を確認する前に、おそらくヌル値の入力を確認してください。.equals

+0

これはいかなる手段による重大な認証でもありません。 – BigAl1992

0

最初にユーザー名を検索します。見つかったら、パスワードを確認し、ループを終了:

public class Authenticate { 
    public void signIn(String username, String password) throws IOException { 
     try (
      FileReader fr = new FileReader("location/accounts.txt"); 
      BufferedReader br = new BufferedReader(fr); 
     ) { 
      boolean success = false; 
      String line; 
      while ((line = br.readLine()) != null) { 
       String[] details = line.split(","); 
       String registeredUser = details[0]; 
       if (registeredUser.equals(username)) { 
        String registeredPass = details[1]; 
        success = registeredPass.equals(password); 
        break; 
       } 
      } 
      System.out.println(success ? "signed in successfully!" : "sign in failed"); 
     } 
    } 
} 
関連する問題