#java #ldap
#java #ldap
Вопрос:
Мне нужно написать фрагмент кода на Java, который установит соединение с LDAP и извлекет оттуда несколько значений.
Мне нужно знать, какие детали мне нужны для установления соединения с LDAP.
Комментарии:
1. Вот несколько примеров кода, которые помогут вам начать: developer.novell.com/documentation/samplecode/jldap_sample /…
Ответ №1:
Java использует JNDI как средство для взаимодействия с сервером каталогов LDAP. Oracle предоставляет отличный учебник по JNDI. Здесь будет подробно описан JNDI API и объяснено, как он связан с операциями LDAP. Он изобилует примерами кода о том, как подключаться, аутентифицировать и запрашивать каталог.
Ответ №2:
Здесь вы получили несколько фрагментов кода, чтобы показать, как выглядит реализация операции смены пароля, вы могли бы использовать его в качестве отправной точки, чтобы узнать больше о LDAP-подключении из Java. Проверьте метод getCtx()…
package so;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.ModificationItem;
public class DemoLdap4SO {
private void changePassword(String principal, String oldPassword, String newPassword)
throws NamingException {
InitialDirContext ctx = getCtx(principal, oldPassword);
if (ctx == null || newPassword == null || newPassword.equals("")) {
throw new NamingException();
}
BasicAttribute attr = new BasicAttribute("userpassword", newPassword);
ModificationItem mi = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attr);
ModificationItem[] items = new ModificationItem[1];
items[0] = mi;
ctx.modifyAttributes(getUserDN(principal), items);
}
private String getUserDN(String user) {
String m_usersDn = "cn=Users,your realm";
String usrDn = "cn=" user "," m_usersDn;
return usrDn;
}
private InitialDirContext getCtx(String user, String pswd) throws NamingException {
String ldapUrl = "put your ldap url here";
String ldapRealm = "put your realm here";
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
ht.put(Context.PROVIDER_URL, ldapUrl);
ht.put(Context.SECURITY_AUTHENTICATION, "simple");
ht.put(Context.SECURITY_PRINCIPAL, getUserDN(user));
ht.put(Context.SECURITY_CREDENTIALS, pswd);
try {
return new InitialDirContext(ht);
} catch (NamingException exc) {
// log error
}
return null;
}
}
Ответ №3:
Вот код для подключения LDAP..
public Connection()
{
try
{
System.setProperty("javax.net.ssl.trustStore", TRUST_STORE);
ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
ldapEnv.put(Context.PROVIDER_URL, "ldap://localhost:389");
ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
ldapEnv.put(Context.SECURITY_PRINCIPAL, SECURITY_PRINCIPAL BASE_NAME);
ldapEnv.put(Context.SECURITY_CREDENTIALS, SECURITY_CREDENTIALS);
ldapContext = new InitialDirContext(ldapEnv);
catch (Exception e)
{
System.out.println(" bind error: " e);
e.printStackTrace();
System.exit(-1);
}
}
Ответ №4:
Используйте jldap
Вот пример кода:
int ldapVersion = LDAPConnection.LDAP_V3;
try
{
if(conn == null)
conn = new LDAPConnection();
// connect to the server
if(conn.isConnected() == false)
conn.connect(hostName, port);
// bind to the server
if(authType.equals("Anonymous"))
{
conn.bind("Anonymous" ,null);
}
else
{
conn.bind(ldapVersion, login, password.getBytes("UTF8"));
}
Logs.write("LDAP CONNECTION Established ");
return true;
}
catch (LDAPException ex) {
Logs.write("CONNECTION ERROR " ex.toString());
return false;
}
catch (IllegalArgumentException ex)
{
Logs.write("CONNECTION ERROR " ex.toString());
return false;
}
Ответ №5:
Это руководство по настройке LDAP Spring поможет вам реализовать Java-клиент для LDAP. Он содержит фрагмент кода для подключения к LDAP и выполнения операций.