Tôi có một ứng dụng web, nơi người dùng phải đăng nhập. Mật khẩu được lưu trữ trong máy chủ LDAP. Tất cả thông tin về máy chủ LDAP được lưu trữ trong máy chủ ứng dụng (glassfish) như tài nguyên jndi bên ngoài. Vì vậy, ứng dụng của tôi không không biết gì về máy chủ LDAP và chỉ nhận được một LdapContext như thế này:Làm thế nào để kiểm tra mật khẩu người dùng trong ldap whith java với LdapContext đã cho?
@Resource(name = "ldap/users")
private LdapContext ctx;
Với bối cảnh này nó rất dễ dàng để thay đổi hoặc đọc các thông tin được lưu trữ cho người dùng, nhưng làm thế nào để tôi kiểm tra mật khẩu của mình ? Thông thường tôi sẽ chỉ thực hiện một kết nối mới để kiểm tra mật khẩu người dùng. Như thế này:
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=S. User, ou=NewHires, o=JNDITutorial");
env.put(Context.SECURITY_CREDENTIALS, "mysecret");
DirContext ctx = new InitialDirContext(env);
Nhưng vì tôi không biết thông số này, tôi không thể thực hiện việc này. Vậy làm cách nào để kiểm tra xem mật khẩu của người dùng có đúng với LdapContext của tôi không? Mật khẩu được lưu trữ mã hóa (ssha) vì vậy tôi không thể chỉ so sánh các thuộc tính.
Cảm ơn Raffael
Xin chào Nikolay, tôi cũng nghĩ rằng đây là phương pháp được ưa thích vì bạn có thể tìm kiếm người dùng theo các tiêu chí khác nhau. Tôi đã thử điều này mặc dù và lấy thuộc tính 'phân biệt' luôn luôn trả về' null'. Tôi nghĩ rằng đó là một lựa chọn tốt hơn để sử dụng 'kết quả.getNameInNamespace() ', bạn nghĩ sao? – maxdev
Xin chào Max, cảm ơn bạn đã tinh chỉnh giải pháp của mình. Về việc obtaing DN, tôi tin rằng nó có thể phụ thuộc vào nhà cung cấp dịch vụ LDAP. Trong trường hợp của tôi 5 năm trước đây trên cổ điển Microsoft AD LDAP nó đã làm việc thông qua khai thác thuộc tính 'attrs.get (" phân biệt tên ")'. –