getEntry方法在幕後使用搜索,所以如果搜索起作用,那麼getEntry也應該起作用。我只是跑了一個快速測試,它適用於我。使用最新的LDAP SDK版本(2.3.6)和下面的代碼,我可以在引用後獲得預期的條目。如果我註釋掉「opts.setFollowReferrals(true)」一行,那麼我得到一個推薦異常:
import com.unboundid.ldap.listener.*;
import com.unboundid.ldap.sdk.*;
public class ReferralTest
{
public static void main(final String... args)
throws Exception
{
final InMemoryDirectoryServerConfig cfg =
new InMemoryDirectoryServerConfig("dc=example,dc=com");
final InMemoryDirectoryServer ds1 = new InMemoryDirectoryServer(cfg);
final InMemoryDirectoryServer ds2 = new InMemoryDirectoryServer(cfg);
ds1.startListening();
ds2.startListening();
final LDAPConnectionOptions opts = new LDAPConnectionOptions();
opts.setFollowReferrals(true);
final LDAPConnection conn1 = ds1.getConnection(opts);
final LDAPConnection conn2 = ds2.getConnection(opts);
conn1.add(
"dn: dc=example,dc=com",
"objectClass: top",
"objectClass: domain",
"dc: example");
conn1.add(
"dn: ou=Referral Entry,dc=example,dc=com",
"objectClass: top",
"objectClass: organizationalUnit",
"ou: Referral Entry",
"description: This is a referral entry");
conn2.add(
"dn: dc=example,dc=com",
"objectClass: top",
"objectClass: domain",
"dc: example");
conn2.add(
"dn: ou=Referral Entry,dc=example,dc=com",
"objectClass: top",
"objectClass: referral",
"objectClass: extensibleObject",
"ou: Referral Entry",
"ref: ldap://127.0.0.1:" + ds1.getListenPort() +
"/ou=Referral Entry,dc=example,dc=com");
final Entry e = conn2.getEntry("ou=Referral Entry,dc=example,dc=com");
System.out.println(e.toLDIFString());
conn1.close();
conn2.close();
ds1.shutDown(true);
ds2.shutDown(true);
}
}
謝謝。我明天會試試你的例子並回報。但是,我有一種感覺,這樣一個不育的例子將起作用,即使連接到我們的Active Directory實例時的類似代碼沒有遵循引用。我也想問,你認爲使用連接池會改變什麼(我正在使用連接池連接到Active Directory)? –
連接是否是連接池的一部分不應該對推薦的處理產生任何影響。只要引薦正確組成,那麼它應該是什麼類型的目錄服務器發送給客戶端無關緊要。 –