2015-05-19 3 views
6

Я использую критерии api для проверки Если имя пользователя существует или нет. После этого я проверяю пароль. Но имя пользователя не чувствительно к регистру. Я хочу сделать его чувствительным к регистру.Критерии в спящем режиме нечувствительны?

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

Любая помощь будет оценена по достоинству.

+3

Это может зависеть от используемой базы данных, или настройки базы данных. Например, насколько я знаю, MS SQL Server по умолчанию делает нечувствительные к регистру строки сравнения, и Oracle делает регистр чувствительным к регистру. – Jesper

+0

@Jesper Я думаю, вы должны ответить на этот вопрос. –

+0

В базе данных были внесены следующие изменения, но он все еще не работает. ALTER TABLE USER_MASTER ИЗМЕНИТЬ ПАРОЛЬ ПАРОЛЬ VARCHAR (255) BINARY; –

ответ

0

я с родным SQL следующим образом

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

Будьте осторожны при прямом вводе имени пользователя в оператор SQL, это может сделать вашу программу уязвимой для [SQL injection] (http://en.wikipedia.org/wiki/SQL_injection). Когда-нибудь [Bobby Tables] (https://xkcd.com/327/) создаст учетную запись в вашей системе ... – Jesper

3

Как сравнивать строки, зависит от марки и версии базы данных и настроек базы данных. Некоторые базы данных, например Microsoft SQL Server, по умолчанию сравнивают строки без учета регистра, в то время как другие сравнивают строки с учетом регистра.

Проверьте настройки базы данных; найдите документацию своего бренда и версию базы данных, чтобы узнать, как изменить этот параметр.

Если это действительно MS SQL Server, а затем посмотреть, например, на этот вопрос: Sql Server check case sensitivity?

0

Я могу сказать простое решение. Но это не прямой путь. Шифруйте свое имя пользователя, используя MD5, и сохраните его в базе данных. При сравнении имени пользователя вы должны зашифровать данное имя пользователя MD5 и сравнить его с именем пользователя, сохраненным в базе данных. Но я не рекомендую это решение, так или иначе, вы также можете использовать это. :)

Смежные вопросы