2016-11-04 1 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(); 

} 

}

을 다음과 같이 텍스트 파일의 내용은
accounts.txt
알렉스, 1234
데이비드, 다음 5678

내 자바 응용 프로그램이 기록이 포함되어 내 프로그램을 호출 한 App 클래스 :

내가 예를 들어 방법 "알렉스", "1234"에서 통과 할 때 123,210

}

문제이며, 출력은 성공적으로 로그인
입니다! 에서
기호

실패 그리고는 "데이비드" "5678 년 통과 할 때"내가 성공적으로 로그인 실패
에서
기호를 얻을!

입력 한 자격 증명에 따라 응용 프로그램에서 "로그인 성공"과 "로그인 실패"를 한 번만 출력하려고합니다.

감사합니다.

+1

간단히과 문자열 변수를 만들 : 일단 루프 암호를 확인하고 종료 발견 "실패 로그인 ' 문자열 결과 =을; 루프 전에. 그런 다음 결과에 사용자가 발견되면 결과를 변경하십시오.루프가 결과 변수를 콘솔 출력에 기록한 후. 또한 사용자가 찾을 때 휴식을 취할 수 있습니다 - "아니오 포인트는 나머지를 읽을 수 – Gildraths

+0

나는 더 나은 이해가 문제가 있습니다. 파일을 반복 할 때마다 사용자 이름과 암호가 일치하지 않을 때마다 마지막으로 사용자 이름과 암호를 찾을 때까지 "로그인 실패"가 표시됩니다. "로그인 성공"이라고 표시됩니다. – BigAl1992

+0

원하는 경우 단절; 성공의 콘솔 출력 후 – Gildraths

답변

1

이것은 서로 다른 값을 사용하여 메서드를 두 번 호출한다는 것을 의미합니다. 전화 코드 (우리에게 제공하지 않은)를 확인하십시오.

다른 발언 :

심각한 인증을 위해이 같은 것을 고려하지 마십시오. 암호는 최소한 파일에 해시되어야합니다 (예 : BCrypt 사용). '자신 만의 롤링'대신 사용해야하는 업계 경쟁력 인증 솔루션을 제공하는 많은 프레임 워크가 있습니다.

당신은 다음 중 한 가지 방법으로 자원을 닫아야합니다 : 최종적으로 블록에

1) :

try (BufferedReader br = new BufferedReader(...)) {  
    // do stuff 
} 
: 자바 8 시도 -과 - 자원 관용구를 사용하여

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

2)

(BufferedReader는 런타임 환경에 의해 자동으로 닫힙니다)

귀하의 exa 위의 mple은 .equals으로 값을 확인하기 전에 null 값에 대한 입력을 확인해야합니다.

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