2015-05-19 14 views
6

Tôi đang sử dụng api tiêu chí để kiểm tra Nếu tên người dùng tồn tại hay không. Sau đó tôi kiểm tra mật khẩu. Nhưng tên người dùng không phân biệt chữ hoa chữ thường. Tôi muốn làm cho nó trở nên nhạy cảm.Tiêu chí trong hibernate là không nhạy cảm?

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

Mọi trợ giúp sẽ được đánh giá cao.

+3

này có thể phụ thuộc vào cơ sở dữ liệu bạn đang sử dụng, hoặc các thiết lập cơ sở dữ liệu. Ví dụ, theo như tôi biết MS SQL Server theo mặc định không so sánh chuỗi phân biệt chữ hoa chữ thường và Oracle phân biệt chữ hoa chữ thường. – Jesper

+0

@ Jesper Tôi nghĩ bạn nên làm cho câu trả lời đó. –

+0

Các thay đổi sau đã được thực hiện ở phía cơ sở dữ liệu nhưng vẫn không hoạt động. ALTER TABLE USER_MASTER THAY ĐỔI MẬT KHẨU MẬT KHẨU VARCHAR (255) BINARY; –

Trả lời

0

tôi đã làm với sql có nguồn gốc như sau

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

Hãy cẩn thận khi đặt trực tiếp tên người dùng trong câu lệnh SQL, điều này có thể làm cho chương trình của bạn dễ bị [SQL injection] (http://en.wikipedia.org/wiki/SQL_injection). Một ngày nào đó [Bobby Tables] (https://xkcd.com/327/) sẽ tạo một tài khoản trên hệ thống của bạn ... – Jesper

3

Cách so sánh các chuỗi, phụ thuộc vào thương hiệu và phiên bản của cơ sở dữ liệu và các cài đặt của cơ sở dữ liệu. Một số cơ sở dữ liệu, ví dụ Microsoft SQL Server, so sánh các chuỗi theo cách không phân biệt dạng chữ theo mặc định, trong khi các chuỗi khác so sánh các chuỗi theo cách phân biệt chữ hoa chữ thường.

Kiểm tra cài đặt cơ sở dữ liệu của bạn; tra cứu tài liệu về thương hiệu và phiên bản cơ sở dữ liệu cụ thể của bạn để tìm hiểu cách thay đổi cài đặt này.

Nếu nó thực sự là MS SQL Server, sau đó nhìn ví dụ ở câu hỏi này: Sql Server check case sensitivity?

0

tôi có thể nói là một giải pháp đơn giản. Nhưng nó không phải là một cách thẳng thắn. Mã hóa tên người dùng của bạn bằng MD5 và lưu nó vào cơ sở dữ liệu. Khi so sánh tên người dùng, bạn phải mã hóa tên người dùng đã cho bằng MD5 và so sánh nó với tên người dùng được lưu trong cơ sở dữ liệu. Nhưng tôi không đề xuất giải pháp này, dù sao bạn cũng có thể sử dụng nó. :)

Các vấn đề liên quan