2013-01-24 123 views
1

当我尝试连接到不允许匿名绑定的LDAP服务器时使用java,我不会收到任何错误。但是,当我使用客户端匿名连接到该服务器时,我无法。有没有一种方法来确定LDAP服务器是否支持匿名绑定或不在java中?如何确定LDAP服务器是否允许匿名绑定?

// Set up environment for creating initial context 
Hashtable<String, Object> env = new Hashtable<String, Object>(); 
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
env.put(Context.PROVIDER_URL, "ldap://"+host+":"+port+"/");  
env.put(Context.SECURITY_PRINCIPAL, dn); 
env.put(Context.REFERRAL, "follow"); 
env.put(VsomConstants.LDAP_CONNECT_TIMEOUT, SystemPreferencesHelper.getLdapConnectionTimeOut().toString()); 

env.put(Context.SECURITY_AUTHENTICATION, "none"); 

// Create initial context 
ctx = new InitialDirContext(env); 
+0

试试吧?并处理异常? – EJP

回答

1

当我对一个不允许匿名绑定运行你的代码,我得到:

javax.naming.AuthenticationNotSupportedException: [LDAP: error code 48 - Anonymous Simple Bind Disabled 

我用于测试的方法,围绕您所提供的代码的包装:

try 
{ 
    doSimpleBind(args[0], args[1], args[2]); 
} 
catch (NamingException e) 
{ 
    e.printStackTrace(); 
} 

不知道你的行:

env.put(VsomConstants.LDAP_CONNECT_TIMEOUT,SystemPreferencesHelper.getLdapConnectionTimeOut().toString()); 

是的,所以我评论了它。

-jim

+0

到服务器我试图连接,我没有得到这个例外。这就是为什么我想知道是否有方法检查LDAP服务器是否允许通过java进行匿名绑定的原因? – user1713069

+0

在LDAP协议中没有任何东西可以让你确定服务器是否允许匿名绑定。您应该使用已知的良好LDAP客户端(来自LDAP服务器供应商的Apache Studio或命令行实用程序)尝试此操作,以确定服务器是否真的不支持匿名绑定。也许,它支持匿名绑定,但没有匿名权限。 – jwilleke

+0

匿名绑定和匿名权限之间的实际区别是什么? – user1713069