複製鏈接
請複製以下鏈接發送給好友

javax.naming.ldap

鎖定
javax.naming.ldap是使用 Java 編程語言編寫的程序。
外文名
javax.naming.ldap
提    供
對 LDAPv3 擴展操作和控件的支持
對    象
使用 Java 編程語言編寫的程序
注    意
與任何特定的命名實現無關

目錄

javax.naming.ldap簡介

軟件包 javax.naming.ldap 的描述
提供對 LDAPv3 擴展操作和控件的支持。
此包擴展 Java Naming and Directory InterfaceTM (JNDI) 的目錄操作。 JNDI 向使用 Java 編程語言編寫的應用程序提供命名和目錄功能。它被設計成與任何特定的命名或目錄服務實現無關。因此可以使用共同的方式對多種服務(新的、新出現的及已經部署的服務)進行訪問。
此包用於處理 LDAPv3 擴展操作和控件的應用程序和服務提供程序,這在 RFC 2251 中定義。此包中的核心接口是 LdapContext,該接口定義了一些在上下文中執行擴展操作和處理控件的方法。

javax.naming.ldap擴展操作

此包定義了接口 ExtendedRequest 來表示擴展操作的參數,定義了接口 ExtendedResponse 來表示擴展操作的結果。擴展響應始終與擴展請求成對出現,但反過來不一定成立。即擴展請求可以沒有對應的擴展響應。

javax.naming.ldap方法1

應用程序通常不直接處理這些接口,而是處理實現 這些接口的類。應用程序可能作為通過 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;
}
}

javax.naming.ldap方法2

控件
此包定義了接口 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 服務器發回“更改 ID”控件來響應成功修改。它將提供 ChangeIDControl 類,以便應用程序可以使用此功能。應用程序將執行更新,然後試圖獲取更改 ID。
// 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(respCtlsinstanceof ChangeIDControl) {
ChangeIDControl cctl = (ChangeIDControl)respCtls;
System.out.println(cctl.getChangeID());
}
}
}
供應商可能提供以下 ChangeIDControl 和 VendorXControlFactory 類。當服務提供程序從 LDAP 服務器接收響應控件時,該提供程序將使用 VendorXControlFactory。
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
}
}
包規範
以下文檔可以在 Java 技術站點找到:
JNDI API Document (Postscript)
JNDI API Document (PDF)
從以下版本開始:
1.3