Java - banalny program sprawdzający hasło.

0

Witam. Kolega poprosił mnie, abym pokazał mu jak napisać aplikację konsolową w javie, która prosi o podanie loginu i hasła, a następnie jest sprawdza. I tutaj moje wielkie zaskoczenie: Napisałem kod a on nie działa z zupełnie niewiadomych przyczyn. Znajduje się on poniżej. Za każdym razem pisze, ze login lub hasło jest niepoprawne.Dlaczego?

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;


public class Login {
	public static void main(String args[]){
		Passy passy = new Passy("admin", "admin"); // tutaj ustawiamy przykładowe hasła...
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader bf = new BufferedReader(isr);
		String login, haslo;
		while(true){
			try {
				System.out.println("Podaj login: ");
				login = bf.readLine();
				System.out.println("Podaj hasło: ");
				haslo = bf.readLine();
				if(login == passy.login && haslo == passy.haslo){
					System.out.println("Poprawne dane. Zostałeś zalogowany.");
					break;
				}else{
					System.out.println("Login lub hasło jest błędne. Spróbuj jeszcze raz!\n");
					continue;
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}
class Passy {
	public String login, haslo;
	public Passy(String login, String haslo){
		this.login = login;
		this.haslo = haslo;
	}
}
1

Nie powinieneś używać operatora == do porównywania napisów. Użyj metody equals.

0

Czyli tak to powinno wyglądać, tak?

if(login.equals(passy.login) && haslo.equals(passy.haslo)){
					System.out.println("Poprawne dane. Zostałeś zalogowany.");
					break;
				}
1

Od biedy może tak być. Zwykle pola zostawia się prywatne i do klasy dodaje się gettery/settery. W Twoim przypadku pola login oraz haslo byłyby prywatne. Do tego musiałbyś dodać metody:

public String getHaslo()
{
  return haslo;
}

public String getLogin()
{
  return login;
}

W tym konkretnym przypadku settery możesz ominąć, ponieważ wartości ustawiasz wyłącznie w konstruktorze.

0

Rozumiem. Dziękuję za pomoc! Pozdrawiam!

0

Hasło podawane jawnym tekstem ...? Dobrych nawyków lepiej się uczyć od początku:

java.io.Console konsola =  System.console();
char [] h= konsola.readPassword();
String haslo = new String(h);

jak już ...

0
K. napisał(a):

Hasło podawane jawnym tekstem ...? Dobrych nawyków lepiej się uczyć od początku:

java.io.Console konsola =  System.console();
char [] h= konsola.readPassword();
String haslo = new String(h);

jak już ...

Nie no oczywiście... Wiem że nie jest to zbyt mądre, by hasła wpisywać tak jak zwykły tekst, ale to jest tylko przykładowy program, w którym to wpisywanie niby-hasła było użyte tylko do tego, by pokazać inny problem (który już na szczęście jak widać został rozwiązany).
Oczywiście pisząc jakiś poważniejszy program na pewno wgłębię się w tajniki kodowania haseł itp. :)
Pozdrawiam!

1 użytkowników online, w tym zalogowanych: 0, gości: 1