使用“从Java中的dirContext获取LDAP属性”;sAMAccountName";而不是",;中国";

使用“从Java中的dirContext获取LDAP属性”;sAMAccountName";而不是",;中国";,java,active-directory,ldap,Java,Active Directory,Ldap,我正在使用Java连接到Active Directory,现在我喜欢使用DirContext的getAttributes方法来查找所有属性,而无需进行搜索 我找到了这个例子,它工作得很好,但是它需要对象的CN,而现在我没有CN 这是我的代码: Hashtable<String, Object> env = new Hashtable<String, Object>(11); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun

我正在使用Java连接到Active Directory,现在我喜欢使用
DirContext
getAttributes
方法来查找所有属性,而无需进行搜索

我找到了这个例子,它工作得很好,但是它需要对象的CN,而现在我没有CN

这是我的代码:

Hashtable<String, Object> env = new Hashtable<String, Object>(11);
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://192.168.18.106:389/OU=journaldesigner,DC=dataplan,DC=intern");
env.put(Context.SECURITY_PRINCIPAL, "kfriese@dataplan.intern" );
env.put(Context.SECURITY_CREDENTIALS, "fridolin" );
env.put(Context.SECURITY_AUTHENTICATION, "simple" );

DirContext ctx = new InitialDirContext(env);

Attributes answer = ctx.getAttributes("cn=Klaus Friese");
用这个

Attributes answer = ctx.getAttributes("sAMAccountName=kfriese");
我得到一个错误:

javax.naming.NameNotFoundException: [LDAP: error code 32 - 0000208D: NameErr: DSID-0310020A, problem 2001 (NO_OBJECT), data 0, best match of:
'OU=JournalDesigner,DC=dataplan,DC=intern'
我现在搜索了一段时间,但没有找到任何相关信息-我可以获得带有sAMAccountName的属性吗?我需要用CN做这个吗? AD服务器是一个Microsoft Active Directory

谢谢 Klaus

方法
getAttributes()
是一种专门的搜索,只接受搜索过滤器的名称。不能使用
sAMAccountName=kfriese
,因为sAMAccountName不是名称。因此,要读取条目的所有属性,必须知道其名称

javax.naming.NameNotFoundException: [LDAP: error code 32 - 0000208D: NameErr: DSID-0310020A, problem 2001 (NO_OBJECT), data 0, best match of:
'OU=JournalDesigner,DC=dataplan,DC=intern'