Mam problem z "systemem logowania" do mojej aplikacji.
Tabela użytkowników (0 i 1 określa czy użytkownik jest adminem czy nie):
Zmienne, które pobierają dane:
String userName = ftUser.getText();
String password = String.valueOf(ftPassword.getPassword());
Funkcja, do której wysyłam te dane:
public int login(String login, String password) throws IOException, ClassNotFoundException {
LoginData data = new LoginData();
data.setLogin(login);
data.setPassword(password);
data.setType("login");
outer = new ObjectOutputStream(socket.getOutputStream());
outer.writeObject(data);
writer = new ObjectInputStream(socket.getInputStream());
LoginData received = (LoginData) writer.readObject();
System.out.println("Serwer says: " + received.getType());
if(received.getType().equals("ok admin"))
return 2;
else if (received.getType().equals("ok user"))
return 1;
else
return 0;
}
Funkcja, gdzie przetwarzam te dane:
while(true) {
writer = new ObjectInputStream(client.getInputStream());
LoginData received = (LoginData) writer.readObject();
if(received.getType().equals("login")) {
setLogin(received.getLogin());
setPassword(received.getPassword());
//System.out.println(getLogin()+getPassword());
loginHandler();
}
private void loginHandler() throws IOException, SQLException {
ObjectOutput outer = new ObjectOutputStream(client.getOutputStream());
LoginData ld = new LoginData();
stmt = db.connect().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
stmt.executeUpdate("USE biblioteka");
String st = ("SELECT * FROM users WHERE login='"+getLogin()+"' AND haslo='"+getPassword()+"'");
rs = stmt.executeQuery(st);
if (rs.next()) {
System.out.println("Witamy w bazie!");
System.out.println("Udane logowanie: " + getLogin());
String admin = rs.getString("admin");
if (admin.equals("1")) {
ld.setType("ok admin");
outer.writeObject(ld);
} else if (admin.equals("0")) {
ld.setType("ok user");
outer.writeObject(ld);
}
db.closeDatabase();
} else {
ld.setType("error login");
outer.writeObject(ld);
System.out.println(ld);
System.err.println("Error Login " + getLogin());
db.closeDatabase();
}
Mój problem polega na tym, że jeśli loguje się do konta zwykłego użytkownika wszystko działa poprawnie. Serwer odpowiada tylko raz i kieruje mnie do odpowiedniego okienka. Jeśli jednak logowanie nie powiedzie się lub następuje logowanie do konta admina to server odpowiada mi podwójnie. Wygląda to mniej więcej tak:
Serwer says: ok user
Serwer says: ok admin
Serwer says: ok admin
Czy ktoś mógłby mi podpowiedzieć na czym polega mój błąd i ewentualnie naprowadzić jak go rozwiązać?