<div> JavaScript is disabled on your browser.
Skip navigation links
Java™ Platform
Standard Ed. 8
compact3

Package javax.naming.ldap

为提升扩展操作和控制支持。

See: 描述

Package javax.naming.ldap Description

为提升扩展操作和控制支持。

这个包的扩展目录操作的java命名和目录interfaceTM(JNDI)。 JNDI提供命名和目录的功能,用java编程语言编写的应用程序。它被设计为独立于任何特定的命名或目录服务实现。因此,各种各样的服务-新的,新兴的,已经部署的-可以以一种常见的方式进行访问。

这个包是应用和服务供应商处理LDAPv3扩展操作和控制,所定义的RFC 2251。此包中的核心接口LdapContext,定义方法进行扩展操作和处理控件的背景。

扩展操作

此包定义了代表论点扩展的操作界面和接口ExtendedRequestExtendedResponse代表扩展操作的结果。一个扩展的响应总是成对的一个扩展的请求,但不一定是相反的。也就是说,你可以有一个扩展的请求,没有相应的扩展响应。

一个应用程序通常不直接处理这些接口。相反,它涉及实现这些接口的类。应用程序获取这些类是部分曲目的扩展操作规范通过因特网,或从目录供应商供应商特定的扩展操作。请求类应该有一个接受类型安全和用户友好的方式的参数的构造函数,而响应类应该有访问类型安全和用户友好的方式响应的数据的方法。在内部,请求/响应类处理编码和解码的误码率值。

例如,假设一个LDAP服务器支持一个“时间”的扩展操作。它将供应类如GetTimeRequestGetTimeResponse,使应用程序可以使用此功能。一个应用程序将使用这些类如下:

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

GetTimeRequestGetTimeResponse类可以定义如下:

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

控制

这个包定义了代表LDAPv3控制接口 Control。它可以被发送到LDAP服务器控件(请求控制)或控制返回LDAP服务器(控制)。不同于扩展的请求和响应,不必在请求控制和响应控制之间进行任何的配对。您可以发送请求控制,并期望没有响应控制返回,或在不发送任何请求控件的同时接收响应控件。

一个应用程序通常不直接处理这个接口。相反,它涉及实现此接口的类。应用程序获取控制班作为控制标准的剧目,通过因特网的一部分,或从目录供应商供应商特定的控件。请求控制类应该有一个接受类型安全和用户友好的方式的参数的构造函数,而响应控件类应该有一个用于获取类型安全和用户友好方式响应的数据的访问方法。在内部,请求/响应控制类处理编码和解码的误码率值。

例如,假设一个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());
        }
    }
}
供应商可能会提供以下 ChangeIDControlVendorXControlFactory类。的 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
    }
}

包装规格

JNDI API规范和相关文件,可以在 JNDI documentation发现。
从以下版本开始:
1.3
Skip navigation links
Java™ Platform
Standard Ed. 8

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.

本帮助文档是使用 《百度翻译》翻译,请与英文版配合使用 by--QQ:654638585