2011-12-10 9 views
1

私はそのパスワードハッシュとユーザー名の組み合わせを経由してDBから単純なオブジェクトをretriveしようとしていますこんにちは....HQLクエリはちょうどuniqueResult(と飛ぶことはありません)

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 
} 

任意のアイデア?それとも、uniqueResultsがないということですか?

私のSHA1ハッシュは塩漬けされていない

、しかし、パスワードハッシュは...多かれ少なかれ、衝突があってはならないapacheのコモンズを使用してランダムな文字列から生成され

さらに、それはので、私は初めてやって休止状態のものですどこかで間違っている可能性があります...

+0

あなたはどのデータベースを実行していますか? hibernate構成で 'hibernate.show_sql = true'と' hibernate.format_sql = true'を使ってSQLログを有効にし、取得したSQLクエリを確認してください。クエリに渡されるパスワードハッシュが実際にデータベース内のパスワードハッシュと同じであることを確認してください(多分、これは文字列エスケープの問題です)。 – tscho

+0

ええ、私はロギングの頭のためにエスケープの問題を考えていた....私はそれを試してみましょう。私はmysqlを実行しています.... – mahatmanich

答えて

0

Okここですべてが流出した場所を知っています。これらのフィールドでjaspyストリングの暗号化を有効にしました。ランダムな塩のため、WHERE句のこれらのフィールドは飛ばないのは明らかです...: -/

1

nullになると、一致するレコードが見つかりませんでした。

パスワードのハッシュに問題がある可能性があります。パスワード値をデータベースから取得することができます。ハードコードは、その値を評価し、ハイバネートクエリをテストします。それがうまくいけば、入力パスワードが違う理由を確認できます。

また、ハッシュされたパスワードをログに記録して、dbの値と一致するかどうかを確認することもできます。また、ユーザー名 - 大文字と小文字を区別する、先導/訓練スペースなどを確認してください。

+0

他のクエリを参照してください、ここで私はIDでユーザーを取得します...私はパスワードを抽出し、同じパスワードを要求パスワードと比較すれば.... – mahatmanich

+1

次に、問題はuserNameでなければなりません。私はそれが入力パラメータの問題であると確信しています - クエリは問題ありません。 – gkamal

+0

2番目のクエリのパスワードをそのまま残しても、結果が得られません。これは本当に奇妙です。 idでそれはとてもうまく動作しますが、結果は1つだけなので、データベースに重複するハッシュはないと私は確信しています。 – mahatmanich

関連する問題