错误信息...
重要的是错误信息,不是你的源程序 ! :) ------------------------------------------------------
           我们还年轻牛奶会有的奶牛也会有的 
             可天天在 csdn 混这些会有吗 ??

解决方案 »

  1.   

    import javax.naming.*;
    import javax.naming.directory.*;
    import java.util.Hashtable;
    import java.util.Enumeration;public class Finder{
          public static void printAttrs(Attributes attrs)throws NamingException{
          if(attrs==null){
            System.out.println("No Attributes:");
            }
          else{
            for(NamingEnumeration ne=attrs.getAll();ne.hasMoreElements();){
                Attribute attribute=(Attribute)ne.next();
                String id=attribute.getID();
            for(Enumeration vals=attribute.getAll();vals.hasMoreElements();){
                System.out.println(id+":"+vals.nextElement());
                }
             }
          }
       }       
           public static void main(String args[]){                          
           try {
                Hashtable env = new Hashtable();
                env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
                env.put(Context.PROVIDER_URL, "ldap://10.1.0.18:389/dc=siroe,dc=com");
                
                DirContext ctx = new InitialDirContext(env);
                Attributes matchAttrs=new BasicAttributes(true);
                matchAttrs.put(new BasicAttribute("sn","Doe"));
                matchAttrs.put(new BasicAttribute("mail"));
                //SearchControls ctls = new SearchControls();
                //String filter = "(&(ou=Accounting)(mail=*))";             
                NamingEnumeration answer=ctx.search("ou=People",matchAttrs);
                while(answer.hasMore()){
                    SearchResult sr=(SearchResult)answer.next();
                    System.out.println(">>>"+sr.getName());
                    printAttrs(sr.getAttributes());
                    }
                }catch (Exception e) {
               e.printStackTrace();
               System.exit(1);
                }
       }
    }
    这是我的一个完整的程序。
    首先,你自己的机器上有没有安装目录服务器,我看你的URL
    "ldap://aaa.sohu.com:389/dc=aaa.sohu,dc=com",aaa.sohu.com这是你的主机名吗?
    如果你只做搜索,没有增删改的话,下面三条就不要了:
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL, "cn=Directory Manager");
    env.put(Context.SECURITY_CREDENTIALS, "password");
      

  2.   

    多谢各位师兄对我的问题的关注,谢谢了
     cansin() 师兄:我自己的机器上没有安装目录服务器,但是目录服务器在的位置为   E450.NEC.COM我是应该这么写吗???
    "ldap://192.168.17.65:389/dc=e450.nec,dc=com");javax.naming.CommunicationException: 192.168.17.65:389.  Root exception is java.
    net.ConnectException: Connection refused: connect
            at java.net.PlainSocketImpl.socketConnect(Native Method)
            at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:350)
            at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:137)
            at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:124)
            at java.net.Socket.<init>(Socket.java:268)
            at java.net.Socket.<init>(Socket.java:95)
            at com.sun.jndi.ldap.Connection.<init>(Connection.java:198)
            at com.sun.jndi.ldap.LdapClient.<init>(LdapClient.java:108)
            at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2379)
            at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:239)
            at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.jav
    a:74)
            at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6
    60)
            at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:241
    )
            at javax.naming.InitialContext.init(InitialContext.java:217)
            at javax.naming.InitialContext.<init>(InitialContext.java:193)
            at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.jav
    a:78)
            at Finder.main(Finder.java:29)
    Press any key to continue...
      

  3.   

    呵呵
    些错了,刚才ip写错了
    这个报错是将
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL, "cn=Directory Manager");
    env.put(Context.SECURITY_CREDENTIALS, "password");
    加上后报错的,我肯定是要进行数据变动的,请问如何变动》?为什么报错????
    javax.naming.AuthenticationException: [LDAP: error code 49 - Invalid Credentials
    ]
            at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:2731)
            at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2677)
            at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2478)
            at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2395)
            at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:239)
            at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.jav
    a:74)
            at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6
    60)
            at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:241
    )
            at javax.naming.InitialContext.init(InitialContext.java:217)
            at javax.naming.InitialContext.<init>(InitialContext.java:193)
            at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.jav
    a:78)
            at Finder.main(Finder.java:34)
    Press any key to continue...
      

  4.   

    实际上是env.put(Context.SECURITY_CREDENTIALS, "password");这句有毛病,请问那里出毛病了?
      

  5.   

    既然你是连的别人的目录服务器,那你知道别人的目录管理员的密码吗?这个目录服务器是否对外开放。Doe是我的目录服务器中存储的用户的的姓,像givenname就是名。根据你的异常来看,你好像没有权限,错误信息是:无效的信任说名你的密码不对。
      

  6.   

    我是知道的,但是我不能在自己机器上对别人的机器的东西进行操作?
    还有,people我这里有的,为什么不好使?
      

  7.   

    我顺便问一下,哪里有能够安装在2000下的ldap服务器?或者如果2000自己代,我如何使用??????????????
    谢谢了
      

  8.   

    能够在2000下安装的ldap目录服务器,像sun的iplanet目录服务器,你可以去下载。至于2000的活动目录,我没有用过。我的目录服务器的组织单元(OU)就是people。给你画一下结构:
                             dc=siroe,dc=com
                                     |
                                     |
                          ------------------------
                          |                      |
                        ou=people            ou=groups
                          |
                   ----------------
                   |   .........   |
                 uid=jdoe       .........
      

  9.   

    我想问一下,为什么 我不能够访问别的机器的ldap,请问如何实现,因为我需要调试的ldap在别的机器上
      

  10.   

    匿名访问:
    env.put(Context.SECURITY_AUTHENTICATION, "none");
    不知别人是否开了匿名。
    --------------------------------------------------
    Simple Authentication 
    // Authenticate as S. User and password "mysecret"
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL, "cn=yourcn");
    env.put(Context.SECURITY_CREDENTIALS, "yourpassword");
      

  11.   

    我得意思事我有unix的用户名
    密码,如何写入程序里面,并且获得对ldap的操作的权利
      

  12.   

    你有unix的用户名和密码,但你没有的LDAP服务器的访问权限,你是连不上的。就像别人开FTP服务,不管他用的是UNIX还是WINDOWS,你用的帐号和密码都是FTP服务的允许的权限,这和系统帐户没什么关系。
      

  13.   

    但是实际上我有ldap的所有权限,admin的,那么在我的程序里面如何体现,比如我的admin的密码是12345678,谢谢了