Статьи

Учебник по Java для LDAP (включая инструкции по установке сервера / клиента LDAP)

Из этого туториала вы узнаете, как написать код Java для взаимодействия с LDAP. Но прежде чем мы сможем это сделать, нам нужно будет настроить сервер и клиент LDAP на нашей машине.

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

Установка сервера LDAP

Я бегу на MBP. Посмотрев некоторое время, я обнаружил, что самым простым для установки LDAP-сервером был ApacheDirectory, который вы можете скачать здесь . (Установка и запуск сервера должны занять не более 5 минут)

После установки он автоматически запускает демон. Затем вы можете запустить сервер с помощью этой команды.

1
sudo launchctl start org.apache.directory.server

Для дальнейших инструкций по установке смотрите здесь .

Клиент LDAP

Вы захотите просмотреть содержимое вашего сервера LDAP. Простейший LDAP-клиент для установки — это Apache Directory Studio, который можно скачать здесь .

После того, как он загружен, вам необходимо создать соединение с сервером — инструкции для которого содержатся здесь .

При подключении ваша Apache Directory Studio должна выглядеть примерно так:

Снимок экрана 2015-09-24 в 13.20.17

Теперь для доступа к LDAP из Java-программы. Лучший способ показать вам, как это сделать, — через пример программы. Программа выполнит следующие задачи:

  • Создать новый объект LDAP
  • Просмотр объекта LDAP
  • Добавить новый атрибут в объект LDAP
  • Изменить атрибут в объекте LDAP
  • Удалить атрибут в объекте LDAP
  • Удалить объект LDAP

Примечание. Этот класс очищается после себя, т. Е. Он оставляет сервер LDAP в состоянии, в котором он был найден. Если вы хотите увидеть различные задачи в действии, просто запустите одну из задач и посмотрите на объект LDAP через клиент LDAP. Не забудьте, что вы можете изменить объект в клиенте LDAP и протестировать его таким образом.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package test;
 
import java.util.Properties;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.*;
 
public class LDAPTest {
 
    public void run() {
        try {
            DirContext context = getContext();
            String name = "employeeNumber=00001,ou=system";
            createLDAPObject(context, name);
            createAttribute(context, name, "displayName", "JOBS");
            viewAttribute(context, name, "displayName");
            updateAttribute(context, name, "displayName", "STEVE");
            viewAttribute(context, name, "displayName");
            removeAttribute(context, name, "displayName");
            removeLDAPObject(context, name);
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }
 
    private void removeLDAPObject(DirContext context, String name) throws NamingException {
        context.destroySubcontext(name);
    }
 
    private void createLDAPObject(DirContext context, String name) throws NamingException {
        Attributes attributes = new BasicAttributes();
 
        Attribute attribute = new BasicAttribute("objectClass");
        attribute.add("inetOrgPerson");
        attributes.put(attribute);
 
        Attribute sn = new BasicAttribute("sn");
        sn.add("Steve");
        attributes.put(sn);
 
        Attribute cn = new BasicAttribute("cn");
        cn.add("Jobs");
        attributes.put(cn);
 
        attributes.put("telephoneNumber", "123456");
        context.createSubcontext(name, attributes);
    }
 
    private void removeAttribute(DirContext context, String name , String attrName) throws NamingException {
        Attribute attribute = new BasicAttribute(attrName);
        ModificationItem[] item = new ModificationItem[1];
        item[0] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, attribute);
        context.modifyAttributes(name, item);
    }
 
    private void createAttribute(DirContext context, String name , String attrName, Object attrValue) throws NamingException {
        Attribute attribute = new BasicAttribute(attrName, attrValue);
        ModificationItem[] item = new ModificationItem[1];
        item[0] = new ModificationItem(DirContext.ADD_ATTRIBUTE, attribute);
        context.modifyAttributes(name, item);
    }
 
    private void updateAttribute(DirContext context, String name , String attrName, Object attrValue) throws NamingException {
        Attribute attribute = new BasicAttribute(attrName, attrValue);
        ModificationItem[] item = new ModificationItem[1];
        item[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attribute);
        context.modifyAttributes(name, item);
    }
 
    private void viewAttribute(DirContext context, String name , String attrName) throws NamingException {
        Attributes attrs = context.getAttributes(name);
        System.out.println(attrName + ":" + attrs.get(attrName).get());
    }
 
    private DirContext getContext() throws NamingException {
        Properties properties = new Properties();
        properties.put(Context.INITIAL_CONTEXT_FACTORY,
                "com.sun.jndi.ldap.LdapCtxFactory");
        properties.put(Context.PROVIDER_URL, "ldap://localhost:10389");
 
        return new InitialDirContext(properties);
    }
 
    public static void main(String[] args) {
        new LDAPTest().run();
    }
}

Код ниже и должен быть понятен.