Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javax.naming.NameNotFoundException:[LDAP:错误代码32-没有这样的对象];剩余名称';dc=server,dc=lan,cn=admin';_Java_Ldap - Fatal编程技术网

javax.naming.NameNotFoundException:[LDAP:错误代码32-没有这样的对象];剩余名称';dc=server,dc=lan,cn=admin';

javax.naming.NameNotFoundException:[LDAP:错误代码32-没有这样的对象];剩余名称';dc=server,dc=lan,cn=admin';,java,ldap,Java,Ldap,我是LDAP新手,正在尝试使用它进行身份验证。但我一直在犯这样的错误: 连接成功 [LDAP: error code 32 - No Such Object] javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]; remaining name 'dc=server,dc=lan,cn=admin' at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapC

我是LDAP新手,正在尝试使用它进行身份验证。但我一直在犯这样的错误: 连接成功

[LDAP: error code 32 - No Such Object]
javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]; remaining name 'dc=server,dc=lan,cn=admin'
    at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3112)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:3033)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2840)
    at com.sun.jndi.ldap.LdapCtx.searchAux(LdapCtx.java:1849)
    at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1772)
    at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(ComponentDirContext.java:386)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:356)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:339)
    at javax.naming.directory.InitialDirContext.search(InitialDirContext.java:267)
    at ldap.Fedora.one(Fedora.java:104)
    at ldap.Fedora.main(Fedora.java:67)
到目前为止,我已经做到了这一点:

    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://localhost:389/dc=server,dc=lan");
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL, "cn=admin,dc=server,dc=world");
    env.put(Context.SECURITY_CREDENTIALS, "william");

    DirContext context = null;

    NamingEnumeration namingEnumeration = null;
    try {
        context = new InitialDirContext(env);
        System.out.println("Connection Successful.");

        SearchControls controls = new SearchControls();
        controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
        namingEnumeration = context.search("dc=server,dc=lan,cn=admin", "objectClass=posixGroup", controls);
        while (namingEnumeration.hasMore()) {
            SearchResult searchResult = (SearchResult) namingEnumeration.next();
            Attributes attributes = searchResult.getAttributes();
            Attribute attr = attributes.get("cn");
            String cn = (String) attr.get();
            System.out.println(" Person Common Name = " + cn);
        }

    } catch (Exception e) {
        System.out.println(e.getMessage());
        e.printStackTrace();

    } catch (Throwable e) {
        e.printStackTrace();
    } finally {
        if (namingEnumeration != null) {
            try {
                namingEnumeration.close();
            } catch (Exception e) {
            }
        }
        if (context != null) {
            try {
                context.close();
            } catch (Exception e) {
            }
        }


}
Hashtable env=new Hashtable();
put(Context.INITIAL\u Context\u工厂,“com.sun.jndi.ldap.LdapCtxFactory”);
env.put(Context.PROVIDER\u URL,“ldap://localhost:389/dc=server,dc=lan”);
环境put(Context.SECURITY_认证,“simple”);
env.put(Context.SECURITY_PRINCIPAL,“cn=admin,dc=server,dc=world”);
环境保护(Context.SECURITY_凭证,“william”);
DirContext=null;
NamingEnumeration NamingEnumeration=null;
试一试{
context=新的InitialDirContext(env);
System.out.println(“连接成功”);
SearchControls=新的SearchControls();
控件.setSearchScope(SearchControls.SUBTREE_范围);

namingEnumeration=context.search(“dc=server,dc=lan,cn=admin”,“objectClass=posixGroup”,controls); while(namingumeration.hasMore()){ SearchResult SearchResult=(SearchResult)namingEnumeration.next(); Attributes=searchResult.getAttributes(); Attribute attr=attributes.get(“cn”); 字符串cn=(字符串)attr.get(); System.out.println(“个人通用名=”+cn); } }捕获(例外e){ System.out.println(e.getMessage()); e、 printStackTrace(); }捕获(可丢弃的e){ e、 printStackTrace(); }最后{ if(namingumeration!=null){ 试一试{ namingumeration.close(); }捕获(例外e){ } } if(上下文!=null){ 试一试{ context.close(); }捕获(例外e){ } } }
错误消息表示找不到对象“dc=server,dc=lan,cn=admin”

例如,您的搜索库可能应该是“cn=admin,dc=server,dc=lan”

使用

如果LDAP用户名设置无效,则还显示32错误

以下是供参考的属性

  • ldap.URL=ldap://ldap.forumsys.com:389/
  • ldap.base.dn=cn=read-only-admin,dc=example,dc=com
  • ldap.password=密码
  • ldap.username=dc=example,dc=com
  • ldap.user.dn.pattern=uid={username},ou=scientists,dc=example,dc=com
  • ldap.aut.domain=ashokParmar

namingumeration=context.search(“cn=admin,dc=server,dc=lan”,“sAMAccountName=william”,controls);我变了,但还是不行。SamaAccountName代表什么,因为错误似乎源自此点。SamaAccountName是windows登录名()。您是否仍然收到相同的错误消息或其他信息?那么您仍然使用了错误的搜索库。根据上面的配置,您可以尝试
namingumeration=context.search(“dc=server,dc=lan”,“sAMAccountName=william”,controls)
namingumeration=context.search(“dc=server,dc=world”,“sAMAccountName=william”,controls)