2011-01-02 16 views
1

Ich habe eine Klasse namens Benutzer, die 2 Eigenschaften hat: Login/Passwort. Ich versuche, einen Benutzer in meiner Anwendung mit Hibernate-Kriterien zu authentifizieren, aber meine Anfrage funktioniert nicht.Noob Frage über Ruhezustand Kriterien

[EDIT] Der zurückgegebene Wert ist NULL. Ich habe zwei Benutzer in meiner Datenbank zum Testen.

Hier ist mein Code:

@Override 
public User authenticate(String login, String password) 
    throws NullPointerException { 
    Session session = this.getSession(); 
    User user = (User) session 
     .createCriteria(User.class) 
     .add(
         Restrictions.and(
          Property.forName("login").eq(login), 
          Property.forName("password").eq(password) 
        )).uniqueResult(); 

    if (user == null){ 
     throw new NullPointerException("User not found"); 
    } 

    return user; 
} 

Kann mir jemand sagt, was mit meinem Code falsch?

Frohes neues Jahr 2011 !!

+1

Was bekommen Sie zurück/was passiert, wenn Sie den Code ausführen? – crnlx

+1

Nun, ich sehe nichts syntaktisch falsch in dem Code, den Sie uns gezeigt haben. Funktioniert es, wenn Sie die Passwortbedingung entfernen? (d. h. Suche nur nach 'Login'). – Alastair

+0

Ja, ich habe versucht, nur nach Login zu suchen, aber der zurückgegebene Benutzer ist immer Null. Ich verstehe nicht, was das Problem ist. Meine Zuordnung ist sehr einfach: 2 Eigenschaften (Login/Passwort mit Getter und Setter). – Dimitri

Antwort

0

Sie sollten den Benutzer zuerst aus der Datenbank abrufen. Wenn der Benutzer nicht vorhanden ist, zeigen Sie eine Nachricht auf Ihrer Anmeldeseite an. Alle Ihre Login-Namen sollten in unique Spalte sein, so dass es nicht notwendig sein wird, die uniqueResult Einschränkung zu drücken.

Zweitens, sobald Sie den Benutzer hochgezogen haben, vergleichen Sie einfach den Passwort-Hash und wenn es OK ist, lassen Sie den Benutzer passieren.

Die oben genannten Schritte vereinfachen die Hibernate-Logik und erleichtern die Fehlersuche. Dies ist, wie die meisten Websites es getan haben. Zumindest soweit es mich betrifft.