我们有多个LDAP /域服务器。(例如LDAP://server1.com:389/DC=server1,DC=COM
,LDAP://server2.com:389/DC=server2,DC=COM
)我需要通过检查可用性来使用其中一个。
try {
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "LDAP://server1.com:389/DC=server1,DC=COM");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, username);
env.put(Context.SECURITY_CREDENTIALS, password);
DirContext ctx = new InitialDirContext(env);
} catch(NamingException ex) {
}
答案 0 :(得分:2)
您可以在PROVIDER_URL环境属性中使用多个ldap服务器URL,如下所示:
Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
// Specify list of space-separated URLs
env.put(Context.PROVIDER_URL,
"ldap://notthere:389/o=JNDITutorial " +
"ldap://localhost:389/o=JNDITutorial " +
"ldap://remotehost/o=JNDITutorial " +
"ldap://thirdhost:389/o=JNDITutorial");
// Create initial context
DirContext ctx = new InitialDirContext(env);
// See which server was used
System.out.println(ctx.getEnvironment().get(Context.PROVIDER_URL));
// do something useful with ctx
....
无论哪个网址成功,都会在上下文中使用
答案 1 :(得分:1)
您可以执行简单的匿名搜索,以查看LDAP服务器是否已启动并正在运行。如果您收到连接拒绝异常,则服务器将关闭,您可以切换到列表中的下一个,再次执行相同的操作。
通常会有一些负载均衡器位于一串域控制器的前面,请求被路由到负载均衡器,负载均衡器将识别正确的DC并代理请求它。 LB负责定期检查其列表中DC的可用性,如果它们发生故障则将其删除,并在它们等时再次检查它们,等等。您可能需要咨询您的IT部门,了解您所在环境中是否存在此类LB.