当前位置: 首页 > 知识库问答 >
问题:

JAVA LDAP错误javax。命名。NamingException:[LDAP:错误代码1-00000 4DC:LdapErr:DSID-0C09075A

吴兴国
2023-03-14

我有一个C#代码来连接LDAP服务器,它工作得非常好

工作C#代码如下所示

        user = "myname@myorg.com";
        string pwd = "secret";

        String uid = "uid=" + user + ",ou=people,dc=myorg,dc=com";
        int empID = 0;
        DirectoryEntry root = new DirectoryEntry("LDAP://myorg.com", user, pwd, AuthenticationTypes.None);
        try
        {
            object connected = root.NativeObject;

            DirectorySearcher search = new DirectorySearcher(root);

            search.Filter = "(&(objectClass=user)(objectCategory=Person))";

            search.PropertiesToLoad.Add("SAMAccountName");
            search.PropertiesToLoad.Add("EmployeeID");

            foreach (System.DirectoryServices.SearchResult resEnt in search.FindAll())
            {
                System.DirectoryServices.DirectoryEntry de = resEnt.GetDirectoryEntry();

                if (de.Properties["employeeID"].Value != null && de.Properties["userPrincipalName"].Value != null)
                {
                    if (user.Equals(de.Properties["userPrincipalName"].Value))
                    {
                        string empIDstr = (string)de.Properties["employeeID"].Value;

                        int.TryParse(empIDstr, out empID);
                        Response.Write("EMp ID is No is "+empID);
                    }

                }
            }
        }
        catch(Exception ex)
        {
            Response.Write("Logon failed");
        }

现在,我正在尝试用java做同样的事情,因为我有另一个应用程序要用java开发,但下面的代码引发了异常

public class LdapClient {


    public void authenticate(String user, String pwd){

        String uid = "uid=" + user + ",ou=people,dc=myorg,dc=com";

        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, "ldap://myorg.com");
        env.put(Context.SECURITY_AUTHENTICATION, "none");
        env.put(Context.SECURITY_PRINCIPAL, uid);
        env.put(Context.SECURITY_CREDENTIALS, pwd);

        try {
            DirContext ctx = new InitialDirContext(env);

            **//THE ERROR COMES AT THE LINE BELOW**
            NamingEnumeration<?> namingEnum = ctx.search("ou=people,dc=myorg,dc=com", "(&(objectclass=user)(objectCategory=Person))", getSimpleSearchControls());
            **strong text**
            while (namingEnum.hasMore ()) {
                SearchResult result = (SearchResult) namingEnum.next ();    
                Attributes attrs = result.getAttributes ();
                System.out.println(attrs.get("cn"));

            } 
            namingEnum.close();
        } catch (Exception e) {
            try {
                e.printStackTrace();
            } catch (Exception e1) {
                e1.printStackTrace();
            }
        }
    }

    private SearchControls getSimpleSearchControls() {
        SearchControls searchControls = new SearchControls();
        searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
        String[] attrIDs = {"samAccountName","employeeID"};
        searchControls.setReturningAttributes(attrIDs);
        return searchControls;
    }

}

请帮忙,因为我认为相应的相同代码在C#中工作

javax.naming.NamingException: [LDAP: error code 1 - 000004DC: LdapErr: DSID-0C09075A, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, v1db1 ]; remaining name 'ou=people,dc=myorg,dc=com'
    at com.sun.jndi.ldap.LdapCtx.mapErrorCode(Unknown Source)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
    at com.sun.jndi.ldap.LdapCtx.searchAux(Unknown Source)
    at com.sun.jndi.ldap.LdapCtx.c_search(Unknown Source)
    at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(Unknown Source)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(Unknown Source)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(Unknown Source)
    at javax.naming.directory.InitialDirContext.search(Unknown Source)
    at ldap.LdapClient.authenticate(LdapClient.java:51)
    at ldap.LdapClient.main(LdapClient.java:30)

我必须在Java中这样做,因为我需要开发另一个指向同一LDAP服务器的应用程序。客户端需要是java。请帮忙

共有1个答案

洪飞驰
2023-03-14

异常表示它需要在执行操作(搜索)之前进行身份验证(绑定)。如留档中所示,尝试使用简单身份验证

// Authenticate as S. User and password "mysecret"
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=S. User, ou=NewHires, o=JNDITutorial");
env.put(Context.SECURITY_CREDENTIALS, "mysecret");
 类似资料:
  • 当试图通过Sonarqube连接到LDAP时,我遇到了以下错误: 2016.09.13 09:35:16调试Web[O.S.P.L.LDAPUsersProvider]用户sonartester在2016年找不到。09.13 09:35:16错误Web[O.S.S.A.RealMauthEnticator]身份验证过程中错误org.sonar.api.utils.SonareXception:无法

  • 我已经使用CN1编写了一个访问sqlite数据库的应用程序。当我使用Netbeans在模拟器中运行应用程序时,它工作得非常好。然而,当我试图连接到实际设备上的db时,我得到了这个错误。。。 在我创建DB实例之前,我已经通过我的代码尝试查看我是否正在执行“关闭”操作,但我看不到它-如果我正在执行此操作,那么我希望它在模拟器中失败,对吗? 谢谢你的帮助 谢啦

  • 我正在为我的公司调查可能的跨平台解决方案,我现在正在尝试代号为One的解决方案。我真的很喜欢它,但今天我创建了一个hello world项目,当我尝试构建服务器时,我得到了一个错误。我还尝试了iOS版本,我得到了同样的错误。下面是我得到的异常: 这是我在build.xmlAndroid设置: 我认为这可能是不相关的,因为它是一个我不关心的构建,并且可能不会被解析,但在我的windows部分buil

  • 我试图在codenameone中构建一个示例,当我试图生成ios构建时,我在codenameone构建服务器下的构建中得到了像"构建错误"这样的错误。 这是我得到的错误日志 如果有人对此有想法,请帮助我... 对不起,我的英语很差。。 提前谢谢。。

  • 我在网上读了很多类似的问题(堆栈溢出,其他来源),但还找不到解决方案。你看到我的配置有什么问题吗?难道我注定要使用简单的机制,让每个人的密码以明文形式四处移动吗?我不能使用CRAM-MD5和GSSAPI,因为我公司的active directory服务不支持它们。

  • 所以,当我在playstore上传我的应用程序时,我得到了一个好消息,每次下载都会出错。 然后我发现它可能是Proguard。 所以,起初我的proGuard项目是空的,给出了300个错误,现在我添加了这些行,proGuard项目就像这样: 并给出以下错误: [2014-10-29 00:50:55-xxx]Proguard返回,错误代码为1。请参阅控制台[2014-10-29 00:50:55-