HQL-запрос просто не летает с uniqueResult () - PullRequest
1 голос
/ 10 декабря 2011

Привет. Я пытаюсь получить простой объект из БД с помощью комбинации хэша пароля и имени пользователя ....

username = request.getParameter("username");
password = request.getParameter("password");

// Converting request password to hash
String passwordHash = SecurityUtil.convertStringToSHA1(password);


Session hs = HibernateUtil.getSessionFactory().getCurrentSession();
hs.beginTransaction();

//query for a single result of matching username with password
//Query hquery = hs.createQuery("from User where id = :id");
//hquery.setParameter("id", 33l);  <- THIS QUERY WORKS

Query hquery = hs.createQuery("from User where password = :password and userName = :userName"); //<- password is a sha1 hash in the db
hquery.setString("userName", username);
hquery.setParameter("password", passwordHash);

User user = (User)hquery.uniqueResult(); //<- Always NULL WHY There should be a unique result.
log.info("UR: "+username);
log.info("PR: "+passwordHash);

if(user!=null) {
    //never reached
    log.info("UDB: "+user.getUserName());
    log.info("PDB: "+user.getPassword());

} else {
    always reaches here
}

Есть идеи?Или это означает, что нет уникальных результатов?

Мои хэши sha1 не засолены, однако хеши паролей генерируются из случайной строки с использованием общих Apache, которые должны быть более или менее свободны от конфликтов ...

Кроме того, я впервые делаю спящий режим, так что я могу где-то ошибаться ...

Ответы [ 2 ]

1 голос
/ 10 декабря 2011

Если вы получаете ноль, это означает, что не найдено ни одной подходящей записи.

Возможна проблема с хэшированием вашего пароля. Вы можете взять значение пароля из базы данных - жесткий код этого значения и протестировать запрос гибернации. Если это работает, вы можете проверить, почему ваш входной пароль отличается.

Вы также можете зарегистрировать хешированный пароль и проверить, соответствует ли он значению в БД. Также проверьте имя пользователя - с учетом регистра, пробелы / пробелы и т. Д.

0 голосов
/ 12 декабря 2011

Хорошо, теперь я знаю, где все пошло на ветер. У меня в этих полях включено шифрование строк jaspy. Из-за случайной соли очевидно, что эти поля в предложении WHERE просто не летают ...: - /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...