Spec-Zone.ru › OpenJDK 25

Пакет 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.length; 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.
Начиная с версии:
1.3
Пакет Описание
javax.naming
Предоставляет классы и интерфейсы для доступа к службам именования.
javax.naming.ldap.spi
Предоставляет интерфейс поставщика службы для поиска DNS при выполнении операций LDAP.
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, определенный в Протокол облегченного доступа к каталогам (v3): расширение для безопасности транспортного уровня. Идентификатор объекта для StartTLS — 1.3.6.1.4.1.1466.20037; значение расширенного запроса не определено.
StartTlsResponse
Этот класс реализует расширенный ответ LDAPv3 для StartTLS, определенный в Протокол облегченного доступа к каталогам (v3): расширение для безопасности транспортного уровня. Идентификатор объекта для StartTLS — 1.3.6.1.4.1.1466.20037; значение расширенного ответа не определено.
UnsolicitedNotification
Этот интерфейс представляет незапрошенное уведомление, определенное в RFC 2251.
UnsolicitedNotificationEvent
Этот класс представляет событие, возникающее в ответ на незапрошенное уведомление, отправленное LDAP-сервером.
UnsolicitedNotificationListener
Этот интерфейс предназначен для обработки UnsolicitedNotificationEvent.

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, включая концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или ее аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

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

Spec-Zone.ru

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