# Java | Login-System



## Aslan1905 (6. Dez 2013)

Hallo, ich bin gerade dabei ein LoginSystem zu für meine Anwendung zu realisieren.

Zum Login-System: Jeder Benutzer erhält beim Anlegen eines Benutzers einen Standardpasswort. Dieser soll beim ersten Login vom User verändert werden.

Java Klasse - Login.java:

Besitzt der User ein Standardpasswort öffnet sich ==> Hauptmenue_user_stdpw (Alle anderen
Abfragen funktionieren einwandfrei).


```
private void cmd_loginActionPerformed(java.awt.event.ActionEvent evt) {                                          
        
            String sql_admin = "SELECT * FROM login WHERE benutzername=? AND passwort=? AND typ='admin' ";
            
            String sql_user_standardpw = "SELECT * FROM login WHERE benutzername=? AND passwort=? AND passwort='1234' AND typ='user' ";
            
            String sql_user = "SELECT * FROM login WHERE benutzername=? AND passwort=? AND typ='user' ";
            
            
            try{
            
            String holen = null;
            
            holen = rs2.getString("Benutzername");
           
                
            pst1 = conn.prepareStatement(sql_admin);
            pst1.setString(1, txt_benutzername.getText());
            pst1.setString(2, txt_passwort.getText());
            
            rs1 = pst1.executeQuery();
                        
            
            pst2 = conn.prepareStatement(sql_user_standardpw);
            pst2.setString(1, txt_benutzername.getText());
            pst2.setString(2, txt_passwort.getText());
            
            rs2 = pst2.executeQuery();
            
            pst3 = conn.prepareStatement(sql_user);
            pst3.setString(1, txt_benutzername.getText());
            pst3.setString(2, txt_passwort.getText());
            
            rs3 = pst3.executeQuery();
            
                if(rs1.next()){
                
                    JOptionPane.showMessageDialog(null, "Die Zugangsdaten sind richtig!");
                    
                    Hauptmenue_admin admin_fenster = new Hauptmenue_admin();
                    admin_fenster.setVisible(true);
                    this.setVisible(false);
                    
                }   else if(rs2.next()) {
                    
                        JOptionPane.showMessageDialog(null, "Willkommen User! Bitte ändern Sie im nächsten Schritt Ihren Standardpasswort.");
                        
                        Hauptmenue_user_stdpw user_stdpw_fenster = new Hauptmenue_user_stdpw();
                        user_stdpw_fenster.setVisible(true);
                        this.setVisible(false);

                
                    }   else if (rs3.next()){
                        
                        JOptionPane.showMessageDialog(null, "Willkommen User!");
                        
                        Hauptmenue_user user_fenster = new Hauptmenue_user();
                        user_fenster.setVisible(true);
                        this.setVisible(false);
                                           
                        }   else {
                    
                                JOptionPane.showMessageDialog(null, "Die Zugangsdaten sind nicht richtig!\n\n"
                                + "Bei Problemen kontaktieren Sie bitte den Administrator.");
                
                            }
            
            }   catch(Exception e) {
                
                    JOptionPane.showMessageDialog(null, e);
                
                }

}
```


Java Klasse: Hauptmenue_user_stdpw 

Nun soll in diesem Fenster das Passwort für den User verändert werden. Das Problem was ich nun habe ist: Ich habe kein Bezug mehr auf den User! Ich weiß nicht, wie ich den Wert (value_3 <== Benutzername) für die Where Bedingung herbekommen soll, da diese sich in der Klasse oben (login.java) in PRIVATE befinden.

Wie bekomme ich hier nun value_3 mit dem Benutzernamen befüllt, der sein Standardpasswort ändern möchte?


```
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        
        
        
        
        try{
            // Hier wird zwei Textfelder verglichen: Neues Passwort & Neues Passwort bestätigen)
            String value_1 = txt_pass1.getText();
            String value_2 = txt_pass2.getText();
        
        
      
           
            
           
            // Hier fehlt mein value_3 ;-(
            String sql ="UPDATE login SET login.Passwort='"+value_1+"' WHERE login.Benutzername='"+value_3+"' ";
                  
            if (value_1.equals(value_2)) {
            
            pst1=conn.prepareStatement(sql);
            
            pst1.execute();
            
            JOptionPane.showMessageDialog(null, "Neues Passwort wurde gespeichert!");
            
            Hauptmenue_user user_fenster = new Hauptmenue_user();
            user_fenster.setVisible(true);
            this.setVisible(false);
            
            
            }   else {
            
                JOptionPane.showMessageDialog(null, "Die Passwörter sind nicht identisch!");
            
                }
        
        
        }   catch(Exception e) {
        
            JOptionPane.showMessageDialog(null, e);
        
            }


    
 }
```

Vielen Dank im Voraus! (Ist sehr wichtig für meine Bachelorarbeit).


----------



## rme (6. Dez 2013)

Hallo,

ist das für eine Bachelorarbeit in Informatik? Dann solltest du eigentlich irgendwelche Entwurfsmuster verwenden, um die GUI mit der Logik zu verbinden.. ich habe vor einiger Zeite mal welche erklärt, bei Interesse lies dir mal diesen Thread durch, da ging es auch um ein Login-System: http://www.java-forum.org/java-basics-anfaenger-themen/156192-designfrage-objektorientierung-2.html

Bei der Verwendung eines solchen Entwurfsmusters klären sich Probleme dieser Art von selbst.


----------



## Ruzmanz (7. Dez 2013)

```
// Hier fehlt mein value_3 ;-(
            String sql ="UPDATE login SET login.Passwort='"+value_1+"' WHERE login.Benutzername='"+value_3+"' ";
```

Btw. SQL-Injection ? Wikipedia


----------



## Tobse (7. Dez 2013)

Ein Standardpasswort?? Bist du des Wahninns? Damit lässt sich doch jeder neu erstellte Account sofort kapern! Erstelle eins zufällig. In PHP macht man das meist so (ist in Java nicht viel mehr aufwand):

```
$password = substr(md5(microtime() . rand(1000)), 0, 8);
```

Des weiteren


> ```
> "AND passwort = ? AND passwort = '1234'"
> ```


ist überflüssig, nimm das mit dem ? und dem erstellten Passwort.


Um an den Benutzernamen zu kommen, gib das dem Eingabe-Fenster im Konstruktor mit oder richte eine getter-methode ein.


----------

