2015-05-19 15 views
6

Sto usando i criteri API per controllare se il nome utente esiste o meno. Dopodiché sto controllando la password. Ma il nome utente non è case sensitive. Voglio renderlo case sensitive.I criteri in ibernazione sono incostanti?

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

Qualsiasi aiuto sarà apprezzato.

+3

Questo potrebbe dipendere dal database in uso, o le impostazioni del database. Ad esempio, per quanto ne so MS SQL Server per impostazione predefinita fa confronti tra stringhe senza distinzione tra maiuscole e minuscole e Oracle fa distinzione tra maiuscole e minuscole. – Jesper

+0

@Jesper Penso che dovresti fare una risposta. –

+0

Le seguenti modifiche sono state fatte sul lato del database, ma ancora non funziona. ALTER TABLE USER_MASTER CHANGE PASSWORD PASSWORD VARCHAR (255) BINARY; –

risposta

0

ho fatto con lo SQL nativo come segue

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

Fare attenzione con l'inserimento diretto di un nome utente in un'istruzione SQL, questo può rendere il programma vulnerabile a [SQL injection] (http://en.wikipedia.org/wiki/SQL_injection). Un giorno [Bobby Tables] (https://xkcd.com/327/) creerà un account sul tuo sistema ... – Jesper

3

Le modalità di confronto delle stringhe dipendono dalla marca e dalla versione del database e dalle impostazioni del database. Alcuni database, ad esempio Microsoft SQL Server, confrontano le stringhe in modo non sensibile alla distinzione tra maiuscole e minuscole per impostazione predefinita, mentre altri confrontano le stringhe in modo sensibile al maiuscolo/minuscolo.

Verificare le impostazioni del database; cercare la documentazione della marca e della versione del database in uso per scoprire come modificare questa impostazione.

Se è davvero MS SQL Server, quindi cercare per esempio a questa domanda: Sql Server check case sensitivity?

0

posso dire una soluzione semplice. Ma non è una via diritta. Cripta il tuo nome utente usando MD5 e salvalo nel database. Quando si confronta il nome utente, è necessario crittografare il nome utente indicato con MD5 e confrontarlo con il nome utente salvato nel database. Ma non sto raccomandando questa soluzione, comunque puoi usare anche questo. :)

Problemi correlati