Пакет javax.naming.ldap

Обеспечивает поддержку расширенных операций и элементов управления LDAPv3.

Этот пакет расширяет операции каталога Java Naming and Directory Interface™ (JNDI). JNDI предоставляет приложениям, написанным на языке программирования Java, функциональность именования и каталогов. Он разработан независимо от любой конкретной реализации службы именования или каталогов. Таким образом, к различным службам — новым, развивающимся и уже развернутым — можно получить доступ общим образом.

Этот пакет предназначен для приложений и поставщиков услуг, которые работают с расширенными операциями и элементами управления LDAPv3, как определено в RFC 2251. Основной интерфейс в этом пакете — LdapContext, который определяет методы контекста для выполнения расширенных операций и обработки элементов управления.

Расширенные операции

Этот пакет определяет интерфейс ExtendedRequest для представления аргумента расширенной операции и интерфейс ExtendedResponse для представления результата расширенной операции. Расширенный ответ всегда связан с расширенным запросом, но не обязательно наоборот. То есть, у вас может быть расширенный запрос, у которого нет соответствующего расширенного ответа.

Приложение обычно не работает напрямую с этими интерфейсами. Вместо этого оно работает с классами, которые реализуют эти интерфейсы. Приложение получает эти классы либо в составе набора расширенных операций, стандартизированных через IETF, либо от поставщиков каталогов для специфичных для поставщика расширенных операций. Классы запросов должны иметь конструкторы, принимающие аргументы удобным и безопасным для типов способом, а классы ответов должны иметь методы доступа для получения данных ответа удобным и безопасным для типов способом. Внутренне, классы запроса/ответа работают с кодированием и декодированием значений BER.

Например, предположим, что сервер LDAP поддерживает расширенную операцию "получить время". Он предоставит такие классы, как GetTimeRequest и GetTimeResponse, чтобы приложения могли использовать эту функцию. Приложение будет использовать эти классы следующим образом:

GetTimeResponse resp =
    (GetTimeResponse) ectx.extendedOperation(new GetTimeRequest());
long time = resp.getTime();

Классы GetTimeRequest и GetTimeResponse могут быть определены следующим образом:

public class GetTimeRequest implements ExtendedRequest {
    // User-friendly constructor 
    public GetTimeRequest() {
    };

    // Methods used by service providers
    public String getID() {
        return GETTIME_REQ_OID;
    }
    public byte[] getEncodedValue() {
        return null;  // no value needed for get time request
    }
    public ExtendedResponse createExtendedResponse(
        String id, byte[] berValue, int offset, int length) throws NamingException {
        return new GetTimeResponse(id, berValue, offset, length);
    }
}
public class GetTimeResponse() implements ExtendedResponse {
    long time;
    // called by GetTimeRequest.createExtendedResponse()
    public GetTimeResponse(String id, byte[] berValue, int offset, int length)
        throws NamingException {
        // check validity of id
        long time =  ... // decode berValue to get time
    }

    // Type-safe and User-friendly methods
    public java.util.Date getDate() { return new java.util.Date(time); }
    public long getTime() { return time; }

    // Low level methods
    public byte[] getEncodedValue() {
        return // berValue saved;
    }
    public String getID() {
        return GETTIME_RESP_OID;
    }
}

Элементы управления

Этот пакет определяет интерфейс Control для представления элемента управления LDAPv3. Он может быть элементом управления, отправляемым на сервер LDAP (элемент управления запроса) или элементом управления, возвращаемым сервером LDAP (элемент управления ответа). В отличие от расширенных запросов и ответов, между элементами управления запроса и ответа не обязательно существует соответствие. Вы можете отправить элементы управления запроса и не ожидать элементов управления ответа, или получить элементы управления ответа без отправки элементов управления запроса.

Приложение обычно не работает напрямую с этим интерфейсом. Вместо этого оно работает с классами, которые реализуют этот интерфейс. Приложение получает классы элементов управления либо в составе набора элементов управления, стандартизированных через IETF, либо от поставщиков каталогов для элементов управления, специфичных для поставщика. Классы элементов управления запросом должны иметь конструкторы, принимающие аргументы удобным и безопасным для типов способом, а классы элементов управления ответом должны иметь методы доступа для получения данных ответа удобным и безопасным для типов способом. Внутренне, классы элементов управления запроса/ответа работают с кодированием и декодированием значений BER.

Например, предположим, что сервер LDAP поддерживает элемент управления запроса "подписанные результаты", который, при отправке вместе с запросом, просит сервер подписать цифровой подписью результаты операции. Он предоставит класс SignedResultsControl, чтобы приложения могли использовать эту функцию. Приложение будет использовать этот класс следующим образом:

Control[] reqCtls = new Control[] {new SignedResultsControl(Control.CRITICAL)};
ectx.setRequestControls(reqCtls);
NamingEnumeration enum = ectx.search(...);
Класс SignedResultsControl может быть определен следующим образом:
public class SignedResultsControl implements Control {
    // User-friendly constructor 
    public SignedResultsControl(boolean criticality) {
        // assemble the components of the request control
    };

    // Methods used by service providers
    public String getID() {
        return // control's object identifier
    }
    public byte[] getEncodedValue() {
        return // ASN.1 BER encoded control value
    }
    ...
}

Когда поставщик услуг получает элементы управления ответа, он использует класс ControlFactory для создания конкретных классов, которые реализуют интерфейс Control.

Сервер LDAP может отправлять элементы управления ответа с операцией LDAP и также с результатами перечисления, такими как те, которые возвращаются операцией списка или поиска. LdapContext предоставляет метод (getResponseControls()) для получения элементов управления ответа, отправленных с операцией LDAP, а интерфейс HasControls используется для извлечения элементов управления ответа, связанных с результатами перечисления.

Например, предположим, что сервер LDAP отправляет элемент управления "идентификатор изменения" в ответ на успешное изменение. Он предоставит класс ChangeIDControl, чтобы приложение могло использовать эту функцию. Приложение выполнит обновление, а затем попытается получить идентификатор изменения.

// Perform update
Context ctx = ectx.createSubsubcontext("cn=newobj");

// Get response controls
Control[] respCtls = ectx.getResponseControls();
if (respCtls != null) {
    // Find the one we want
    for (int i = 0; i < respCtls; i++) {
        if(respCtls[i] instanceof ChangeIDControl) {
            ChangeIDControl cctl = (ChangeIDControl)respCtls[i];
            System.out.println(cctl.getChangeID());
        }
    }
}
Поставщик может предоставить следующие классы ChangeIDControl и VendorXControlFactory. VendorXControlFactory будет использоваться поставщиком услуг при получении поставщиком элементов управления ответа от сервера LDAP.
public class ChangeIDControl implements Control {
    long id;

    // Constructor used by ControlFactory
    public ChangeIDControl(String OID, byte[] berVal) throws NamingException {
        // check validity of OID
        id = // extract change ID from berVal
    };

    // Type-safe and User-friendly method
    public long getChangeID() {
        return id;
    }

    // Low-level methods
    public String getID() {
        return CHANGEID_OID;
    }
    public byte[] getEncodedValue() {
        return // original berVal
    }
    ...
}
public class VendorXControlFactory extends ControlFactory {
    public VendorXControlFactory () {
    }

    public Control getControlInstance(Control orig) throws NamingException {
        if (isOneOfMyControls(orig.getID())) {
            ...

            // determine which of ours it is and call its constructor
            return (new ChangeIDControl(orig.getID(), orig.getEncodedValue()));
        }
        return null;  // not one of ours
    }
}
С момента:
1.3
Интерфейс Описание
Control

Этот интерфейс представляет элемент управления LDAPv3, как определено в RFC 2251.

ExtendedRequest

Этот интерфейс представляет запрос расширенной операции LDAPv3, как определено в RFC 2251.

ExtendedResponse

Этот интерфейс представляет ответ на расширенную операцию LDAP, как определено в RFC 2251.

HasControls

Этот интерфейс предназначен для возврата элементов управления с объектами, возвращенными в NamingEnumerations.

LdapContext

Этот интерфейс представляет контекст, в котором можно выполнять операции с элементами управления LDAPv3 и выполнять расширенные операции LDAPv3.

UnsolicitedNotification

Этот интерфейс представляет незапрошенное уведомление, как определено в RFC 2251.

UnsolicitedNotificationListener

Этот интерфейс предназначен для обработки UnsolicitedNotificationEvent.

Класс Описание
BasicControl

Этот класс предоставляет базовую реализацию интерфейса Control.

ControlFactory

Этот абстрактный класс представляет фабрику для создания элементов управления LDAPv3.

InitialLdapContext

Этот класс является начальным контекстом для выполнения расширенных операций и элементов управления LDAPv3.

LdapName

Этот класс представляет имя с заданными характеристиками, как указано в RFC 2253.

ManageReferralControl

Запрашивает, чтобы ссылки и другие специальные объекты LDAP обрабатывались как обычные объекты LDAP.

PagedResultsControl

Запрашивает, чтобы результаты операции поиска возвращались сервером LDAP партиями заданного размера.

PagedResultsResponseControl

Указывает конец партии результатов поиска.

Rdn

Этот класс представляет относительное имя с заданными характеристиками (RDN), которое является компонентом имени с заданными характеристиками, как указано в RFC 2253.

SortControl

Запрашивает, чтобы результаты операции поиска сортировались сервером LDAP перед возвратом.

SortKey

Ключ сортировки и связанные с ним параметры сортировки.

SortResponseControl

Указывает, была ли успешной запрошенная сортировка результатов поиска или нет.

StartTlsRequest

Этот класс реализует расширенный запрос LDAPv3 для StartTLS, как определено в Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security Идентификатор объекта для StartTLS — 1.3.6.1.4.1.1466.20037, и значение расширенного запроса не определено.

StartTlsResponse

Этот класс реализует расширенный ответ LDAPv3 для StartTLS, как определено в Lightweight Directory Access Protocol (v3): Extension for Transport Layer Security Идентификатор объекта для StartTLS — 1.3.6.1.4.1.1466.20037, и значение расширенного ответа не определено.

UnsolicitedNotificationEvent

Этот класс представляет событие, сгенерированное в ответ на незапрошенное уведомление, отправленное сервером LDAP.

Исключение Описание
LdapReferralException

Этот абстрактный класс используется для представления исключения перенаправления LDAP.

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/11/docs/api/java.naming/javax/naming/ldap/package-summary.html

Spec-Zone .ru
спецификации, руководства, описания, API