mirror of
https://github.com/fofolee/uTools-Manuals.git
synced 2025-08-23 19:49:34 +08:00
392 lines
18 KiB
HTML
392 lines
18 KiB
HTML
<div class="header">
|
||
<h1 class="title" title="Package">Package javax.naming.ldap</h1>
|
||
<div class="docSummary">
|
||
<div class="block">
|
||
提供对LDAPv3扩展操作和控件的支持。
|
||
</div>
|
||
</div>
|
||
<p>See: <a href="#package.description">描述</a></p>
|
||
</div><div class="contentContainer">
|
||
<ul class="blockList">
|
||
<li class="blockList">
|
||
<table border="0" cellpadding="3" cellspacing="0" class="typeSummary" summary="Interface Summary table, listing interfaces, and an explanation">
|
||
<caption>
|
||
<span>接口摘要</span>
|
||
<span class="tabEnd"> </span>
|
||
</caption>
|
||
<tbody>
|
||
<tr>
|
||
<th class="colFirst" scope="col">接口</th>
|
||
<th class="colLast" scope="col">描述</th>
|
||
</tr>
|
||
</tbody>
|
||
<tbody>
|
||
<tr class="altColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/Control.html" title="interface in javax.naming.ldap">Control</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
此接口表示为在所定义的控制LDAPv3的
|
||
<a href="http://www.ietf.org/rfc/rfc2251.txt">RFC 2251</a> 。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="rowColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/ExtendedRequest.html" title="interface in javax.naming.ldap">ExtendedRequest</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
此接口表示为在限定的LDAPv3扩展操作请求
|
||
<a href="http://www.ietf.org/rfc/rfc2251.txt">RFC 2251</a> 。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="altColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/ExtendedResponse.html" title="interface in javax.naming.ldap">ExtendedResponse</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
此接口表示为在限定的LDAP扩展操作响应
|
||
<a href="http://www.ietf.org/rfc/rfc2251.txt">RFC 2251</a> 。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="rowColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/HasControls.html" title="interface in javax.naming.ldap">HasControls</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
此接口用于使用NamingEnumerations返回的对象返回控件。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="altColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/LdapContext.html" title="interface in javax.naming.ldap">LdapContext</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
此接口表示您可以使用LDAPv3样式控件执行操作并执行LDAPv3样式扩展操作的上下文。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="rowColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/UnsolicitedNotification.html" title="interface in javax.naming.ldap">UnsolicitedNotification</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
此接口表示RFC 2251中定义的
|
||
<a href="http://www.ietf.org/rfc/rfc2251.txt">主动通知</a> 。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="altColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/UnsolicitedNotificationListener.html" title="interface in javax.naming.ldap">UnsolicitedNotificationListener</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
此界面用于处理
|
||
<tt>UnsolicitedNotificationEvent</tt> 。
|
||
</div> </td>
|
||
</tr>
|
||
</tbody>
|
||
</table> </li>
|
||
<li class="blockList">
|
||
<table border="0" cellpadding="3" cellspacing="0" class="typeSummary" summary="Class Summary table, listing classes, and an explanation">
|
||
<caption>
|
||
<span>类摘要</span>
|
||
<span class="tabEnd"> </span>
|
||
</caption>
|
||
<tbody>
|
||
<tr>
|
||
<th class="colFirst" scope="col">类</th>
|
||
<th class="colLast" scope="col">描述</th>
|
||
</tr>
|
||
</tbody>
|
||
<tbody>
|
||
<tr class="altColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/BasicControl.html" title="class in javax.naming.ldap">BasicControl</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
这个类提供了
|
||
<tt>Control</tt>接口的基本实现。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="rowColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/ControlFactory.html" title="class in javax.naming.ldap">ControlFactory</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
这个抽象类代表一个用于创建LDAPv3控件的工厂。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="altColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/InitialLdapContext.html" title="class in javax.naming.ldap">InitialLdapContext</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
此类是执行LDAPv3风格的扩展操作和控件的起始上下文。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="rowColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/LdapName.html" title="class in javax.naming.ldap">LdapName</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
此类表示由指定的专有名称
|
||
<a href="http://www.ietf.org/rfc/rfc2253.txt">RFC 2253</a> 。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="altColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/ManageReferralControl.html" title="class in javax.naming.ldap">ManageReferralControl</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
请求将引用和其他特殊LDAP对象作为普通LDAP对象进行操作。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="rowColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/PagedResultsControl.html" title="class in javax.naming.ldap">PagedResultsControl</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
请求LDAP服务器以指定大小的批量返回搜索操作的结果。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="altColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/PagedResultsResponseControl.html" title="class in javax.naming.ldap">PagedResultsResponseControl</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
表示一批搜索结果的结束。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="rowColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/Rdn.html" title="class in javax.naming.ldap">Rdn</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
该类表示相对可分辨名称或RDN,它是由RFC 2253指定的专有名称的组成
|
||
<a href="http://www.ietf.org/rfc/rfc2253.txt">部分</a> 。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="altColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/SortControl.html" title="class in javax.naming.ldap">SortControl</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
请求在返回之前由LDAP服务器对搜索操作的结果进行排序。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="rowColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/SortKey.html" title="class in javax.naming.ldap">SortKey</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
排序键及其相关的排序参数。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="altColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/SortResponseControl.html" title="class in javax.naming.ldap">SortResponseControl</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
指示所请求的搜索结果是否成功。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="rowColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/StartTlsRequest.html" title="class in javax.naming.ldap">StartTlsRequest</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
该类实现了88242981311868中定义的StartTLS的LDAPv3扩展请求
|
||
<a href="http://www.ietf.org/rfc/rfc2830.txt">。StartTLS</a>的对象标识符为1.3.6.1.4.1.1466.20037,并且未定义扩展请求值。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="altColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/StartTlsResponse.html" title="class in javax.naming.ldap">StartTlsResponse</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
此类实现了88242981326868中定义的StartTLS的LDAPv3扩展响应
|
||
<a href="http://www.ietf.org/rfc/rfc2830.txt">。StartTLS</a>的对象标识符为1.3.6.1.4.1.1466.20037,未定义扩展响应值。
|
||
</div> </td>
|
||
</tr>
|
||
<tr class="rowColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/UnsolicitedNotificationEvent.html" title="class in javax.naming.ldap">UnsolicitedNotificationEvent</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
此类表示响应LDAP服务器发送的未经请求的通知触发的事件。
|
||
</div> </td>
|
||
</tr>
|
||
</tbody>
|
||
</table> </li>
|
||
<li class="blockList">
|
||
<table border="0" cellpadding="3" cellspacing="0" class="typeSummary" summary="Exception Summary table, listing exceptions, and an explanation">
|
||
<caption>
|
||
<span>异常摘要</span>
|
||
<span class="tabEnd"> </span>
|
||
</caption>
|
||
<tbody>
|
||
<tr>
|
||
<th class="colFirst" scope="col">异常</th>
|
||
<th class="colLast" scope="col">描述</th>
|
||
</tr>
|
||
</tbody>
|
||
<tbody>
|
||
<tr class="altColor">
|
||
<td class="colFirst"><a href="../../../javax/naming/ldap/LdapReferralException.html" title="class in javax.naming.ldap">LdapReferralException</a></td>
|
||
<td class="colLast">
|
||
<div class="block">
|
||
此抽象类用于表示LDAP引用异常。
|
||
</div> </td>
|
||
</tr>
|
||
</tbody>
|
||
</table> </li>
|
||
</ul>
|
||
<a name="package.description">
|
||
<!-- --> </a>
|
||
<h2 title="Package javax.naming.ldap Description">Package javax.naming.ldap Description</h2>
|
||
<div class="block">
|
||
<span>提供对LDAPv3扩展操作和控件的支持。</span>
|
||
<p> <span>此包扩展了Java命名和目录接口<font size="-2"><sup>TM</sup></font> (JNDI)的目录操作。</span> <span>JNDI为以Java编程语言编写的应用程序提供命名和目录功能。</span> <span>它被设计为独立于任何特定的命名或目录服务实现。</span> <span>因此,可以以一种常见的方式访问各种服务 - 新的,新兴的和已经部署的服务。</span> </p>
|
||
<p> <span>此软件包适用于由<a href="http://www.ietf.org/rfc/rfc2251.txt">RFC 2251</a>定义的处理LDAPv3扩展操作和控件的应用程序和服务<a href="http://www.ietf.org/rfc/rfc2251.txt">提供商</a> 。</span> <span>该软件包中的核心界面是<tt>LdapContext</tt> ,它定义了上下文中用于执行扩展操作和处理控件的方法。</span> </p>
|
||
<h4> <span>扩展操作</span> </h4>
|
||
<p> <span>这个包定义了接口<tt>ExtendedRequest</tt>表示的参数的扩展操作,并且接口<tt>ExtendedResponse</tt>来表示扩展操作的结果。</span> <span>扩展响应始终与扩展请求配对,但不一定反之亦然。</span> <span>也就是说,您可以有一个没有相应扩展响应的扩展请求。</span> </p>
|
||
<p> <span>应用程序通常不直接处理这些接口。</span> <span>相反,它处理<em>实现</em>这些接口的类。</span> <span>应用程序将这些类作为通过IETF标准化的扩展操作的一部分,或从目录供应商获取供应商特定扩展操作的一部分。</span> <span>请求类应该具有以类型安全和用户友好的方式接受参数的构造函数,而响应类应该具有以类型安全和用户友好的方式获取响应的数据的访问方法。</span> <span>在内部,请求/响应类处理BER值的编码和解码。</span> </p>
|
||
<p> <span>例如,假设LDAP服务器支持“获取时间”扩展操作。</span> <span>它将提供类别,如<tt>GetTimeRequest</tt>和<tt>GetTimeResponse</tt> ,以便应用程序可以使用此功能。</span> <span>应用程序将使用以下类:</span> </p>
|
||
<blockquote>
|
||
<span><pre>
|
||
GetTimeResponse resp =
|
||
(GetTimeResponse) ectx.extendedOperation(new GetTimeRequest());
|
||
long time = resp.getTime();
|
||
</pre></span>
|
||
</blockquote>
|
||
<p> <span><tt>GetTimeRequest</tt>和<tt>GetTimeResponse</tt>类可能定义如下:</span> </p>
|
||
<blockquote>
|
||
<span><pre>
|
||
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;
|
||
}
|
||
}
|
||
</pre></span>
|
||
</blockquote>
|
||
<h4> <span>控制</span> </h4>
|
||
<span>该包定义了用于表示LDAPv3控件的接口<tt>Control</tt> 。</span>
|
||
<span>它可以是发送到LDAP服务器( <em>请求控制</em> )或由LDAP服务器返回的控件( <em>响应控件</em> )的<em>控件</em> 。</span>
|
||
<span>与扩展请求和响应不同,请求控件和响应控件之间不一定要配对。</span>
|
||
<span>您可以发送请求控制,并且不需要响应控制,或接收响应控制,而不发送任何请求控件。</span>
|
||
<p> <span>应用程序通常不直接处理此接口。</span> <span>而是处理<em>实现</em>此接口的类。</span> <span>应用程序获取控制类,作为通过IETF标准化的控件的一部分,或从供应商特定控件的目录供应商获取控制类。</span> <span>请求控制类应该具有以类型安全和用户友好的方式接受参数的构造函数,而响应控制类应该具有以类型安全和用户友好的方式获取响应的数据的访问方法。</span> <span>在内部,请求/响应控制类处理BER值的编码和解码。</span> </p>
|
||
<p> <span>例如,假设LDAP服务器支持“签名结果”请求控制,当请求发送时,请求服务器对操作的结果进行数字签名。</span> <span>它将提供一个类别<tt>SignedResultsControl</tt> ,以便应用程序可以使用此功能。</span> <span>应用程序将使用此类如下:</span> </p>
|
||
<blockquote>
|
||
<span><pre>
|
||
Control[] reqCtls = new Control[] {new SignedResultsControl(Control.CRITICAL)};
|
||
ectx.setRequestControls(reqCtls);
|
||
NamingEnumeration enum = ectx.search(...);
|
||
</pre></span>
|
||
</blockquote>
|
||
<span><tt>SignedResultsControl</tt>类可能定义如下:</span>
|
||
<blockquote>
|
||
<span><pre>
|
||
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
|
||
}
|
||
...
|
||
}
|
||
</pre></span>
|
||
</blockquote>
|
||
<p> <span>当服务提供商接收响应控制时,它使用<tt>ControlFactory</tt>类以产生实现<tt>Control</tt>接口特定的类。</span> </p>
|
||
<p> <span>LDAP服务器可以使用LDAP操作发回响应控件,还可以使用列举或搜索操作返回的枚举结果。</span> <span><tt>LdapContext</tt>提供了一种用于获取使用LDAP操作发送的响应控件的方法( <tt>getResponseControls()</tt> ),而<tt>HasControls</tt>接口用于检索与枚举结果相关联的响应控件。</span> </p>
|
||
<p> <span>例如,假设一个LDAP服务器发送一个“更改ID”控件以响应成功的修改。</span> <span>它将提供一个类别<tt>ChangeIDControl</tt> ,以便应用程序可以使用此功能。</span> <span>应用程序将执行更新,然后尝试获取更改ID。</span> </p>
|
||
<blockquote>
|
||
<span><pre>
|
||
// 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());
|
||
}
|
||
}
|
||
}
|
||
</pre></span>
|
||
</blockquote>
|
||
<span>供应商可能会提供以下<tt>ChangeIDControl</tt>和<tt>VendorXControlFactory</tt>类。</span>
|
||
<span>当提供者从LDAP服务器收到响应控制时, <tt>VendorXControlFactory</tt>将由服务提供商使用。</span>
|
||
<blockquote>
|
||
<span><pre>
|
||
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
|
||
}
|
||
}
|
||
</pre></span>
|
||
</blockquote>
|
||
<p></p>
|
||
<h2> <span>包装规格</span> </h2>
|
||
<span>JNDI API规范及相关文档可在发现<a href="../../../../technotes/guides/jndi/index.html">JNDI documentation</a> 。</span>
|
||
</div>
|
||
<dl>
|
||
<dt>
|
||
<span class="simpleTagLabel">从以下版本开始:</span>
|
||
</dt>
|
||
<dd>
|
||
1.3
|
||
</dd>
|
||
</dl>
|
||
</div> |