2015-05-19 10 views
6

Ich verwende Kriterien api, um zu überprüfen, ob der Benutzername existiert oder nicht. Danach überprüfe ich das Passwort. Aber der Benutzername ist nicht Groß-und Kleinschreibung. Ich möchte die Groß-/Kleinschreibung beachten.Kriterien im Winterschlaf ist inkasensitive?

Criteria criteria2 = session.createCriteria(UserMaster.class); 
criteria2.add(Restrictions.eq("userName", userName)); 
userDetails = (UserMaster)criteria2.uniqueResult(); 
if(userDetails != null) { 
     //logic goes here 
} 

Jede Hilfe wird geschätzt.

+3

Diese auf der Datenbank abhängen können Sie verwenden, oder die Einstellungen der Datenbank. Zum Beispiel, soweit ich weiß, MS SQL Server tut standardmäßig Groß-und Kleinschreibung nichtsensitiv String-Vergleiche und Oracle. – Jesper

+0

@Jesper Ich denke du solltest das eine Antwort geben. –

+0

Die folgenden Änderungen wurden auf der Datenbankseite vorgenommen, funktionieren aber immer noch nicht. ALTER TABLE USER_MASTER PASSWORT ÄNDERN PASSWORT VARCHAR (255) BINARY; –

Antwort

0

ich mit der nativen SQL-tat, wie

folgt
Query query = session.createSQLQuery("select * from USER_MASTER where binary USER_NAME='"+userName+"'").addEntity(UserMaster.class); 
userDetails = (UserMaster)query.uniqueResult(); 
if(userDetails != null) { 
    //code goes here 
} 
+0

Seien Sie vorsichtig, wenn Sie einen Benutzernamen direkt in eine SQL-Anweisung schreiben, dies kann Ihr Programm anfällig für [SQL injection] machen (http://en.wikipedia.org/wiki/SQL_injection). Eines Tages [Bobby Tables] (https://xkcd.com/327/) erstellt ein Konto auf Ihrem System ... – Jesper

3

Wie Strings verglichen werden, hängt von der Marke und der Version der Datenbank und den Einstellungen der Datenbank ab. Einige Datenbanken, z. B. Microsoft SQL Server, vergleichen Zeichenfolgen standardmäßig nicht zwischen Groß- und Kleinschreibung, während andere Zeichenfolgen unter Beachtung der Groß- und Kleinschreibung vergleichen.

Überprüfen Sie die Einstellungen Ihrer Datenbank; Suchen Sie in der Dokumentation Ihrer bestimmten Marke und Version der Datenbank nach, wie Sie diese Einstellung ändern können.

Wenn es in der Tat MS SQL Server ist, dann schauen Sie zum Beispiel auf diese Frage: Sql Server check case sensitivity?

0

ich eine einfache Lösung sagen kann. Aber es ist kein geradliniger Weg. Verschlüsseln Sie Ihren Benutzernamen mit MD5 und speichern Sie ihn in der Datenbank. Wenn Sie den Benutzernamen vergleichen, müssen Sie den angegebenen Benutzernamen mit MD5 verschlüsseln und ihn mit dem in der Datenbank gespeicherten Benutzernamen vergleichen. Aber ich empfehle diese Lösung nicht, jedenfalls können Sie dies auch verwenden. :)

Verwandte Themen