Spec-Zone.ru › OpenJDK 21

Пакет javax.naming.ldap

package 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
    }
}

Спецификация пакета

Спецификация API JNDI и связанные документы находятся в документации JNDI.
Since:
1.3
Пакет Описание
javax.naming
Предоставляет классы и интерфейсы для доступа к службам именования.
javax.naming.ldap.spi
javax.naming.directory
Расширяет пакет javax.naming для предоставления функциональности доступа к службам каталогов.
javax.naming.event
Предоставляет поддержку уведомлений об событиях при доступе к службам именования и каталогов.
javax.naming.spi
Предоставляет средства для динамической подгрузки поддержки доступа к службам именования и каталогов через пакеты javax.naming и связанные с ними пакеты.
Класс Описание
BasicControl
Этот класс предоставляет базовую реализацию интерфейса Control.
Control
Этот интерфейс представляет собой управление LDAPv3, как определено в RFC 2251.
ControlFactory
Этот абстрактный класс представляет собой фабрику для создания элементов управления LDAPv3.
ExtendedRequest
Этот интерфейс представляет запрос расширенной операции LDAPv3, как определено в RFC 2251.
ExtendedResponse
Этот интерфейс представляет собой ответ расширенной операции LDAP, как определено в RFC 2251.
HasControls
Этот интерфейс предназначен для возврата элементов управления с объектами, возвращаемыми в NamingEnumerations.
InitialLdapContext
Этот класс является начальным контекстом для выполнения расширенных операций LDAPv3-стиля и управления.
LdapContext
Этот интерфейс представляет контекст, в котором можно выполнять операции с элементами управления LDAPv3-стиля и выполнять расширенные операции LDAPv3-стиля.
LdapName
Этот класс представляет собой имя по умолчанию, как указано в RFC 2253.
LdapReferralException
Этот абстрактный класс используется для представления исключения переадресации LDAP.
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, и значение расширенного ответа не определено.
UnsolicitedNotification
Этот интерфейс представляет собой неуведомление, как определено в RFC 2251.
UnsolicitedNotificationEvent
Этот класс представляет собой событие, сгенерированное в ответ на неуведомление, отправленное сервером LDAP.
UnsolicitedNotificationListener
Этот интерфейс предназначен для обработки UnsolicitedNotificationEvent.

© 1993, 2023, 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/21/docs/api/java.naming/javax/naming/ldap/package-summary.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API