问题描述
客户要求将AD域用户组的用户信息提取出来,保存到数据里去,在网上找了一些代码,发现问题蛮多的。请高手帮忙。这是我现在用的代码:publicstaticvoidmain(Stringargs[]){HashtableHashEnv=newHashtable();StringLDAP_URL="ldap://xxx.xxx.xxx.xxx:389";//LDAP访问地址StringadminName="Sun@domain.local";//注意用户名的写法:domainUser或User@domain.comStringadminPassword="sun";//密码HashEnv.put(Context.SECURITY_AUTHENTICATION,"simple");//LDAP访问安全级别HashEnv.put(Context.SECURITY_PRINCIPAL,adminName);//ADUserHashEnv.put(Context.SECURITY_CREDENTIALS,adminPassword);//ADPasswordHashEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");//LDAP工厂类HashEnv.put(Context.PROVIDER_URL,LDAP_URL);try{LdapContextctx=newInitialLdapContext(HashEnv,null);SearchControlssearchCtls=newSearchControls();//CreatethesearchcontrolssearchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);//SpecifythesearchscopeStringsearchFilter="objectClass=User";//specifytheLDAPsearchfilterStringsearchBase="DC=Hebmc,DC=com";//SpecifytheBaseforthesearch//搜索域节点inttotalResults=0;StringreturnedAtts[]={"url","whenChanged","employeeID","name","userPrincipalName","physicalDeliveryOfficeName","departmentNumber","telephoneNumber","homePhone","mobile","department","sAMAccountName","whenChanged","mail"};//定制返回属性searchCtls.setReturningAttributes(returnedAtts);//设置返回属性集//SearchforobjectsusingthefilterNamingEnumerationanswer=ctx.search(searchBase,searchFilter,searchCtls);if(answer==null||answer.equals(null)){System.out.println("answerisnull");}else{System.out.println("answernotnull");}System.out.println(answer.hasMoreElements());while(answer.hasMoreElements()){SearchResultsr=(SearchResult)answer.next();System.out.println("************************************************");System.out.println(sr.getName());AttributesAttrs=sr.getAttributes();if(Attrs!=null){try{for(NamingEnumerationne=Attrs.getAll();ne.hasMore();){AttributeAttr=(Attribute)ne.next();System.out.println("AttributeID="+Attr.getID().toString());//读取属性值for(NamingEnumeratione=Attr.getAll();e.hasMore();totalResults++){System.out.println("AttributeValues="+e.next().toString());}System.out.println("---------------");//读取属性值Enumerationvalues=Attr.getAll();if(values!=null){//迭代while(values.hasMoreElements()){System.out.println("AttributeValues="+values.nextElement());}}System.out.println("---------------");}}catch(NamingExceptione){System.err.println("ThrowException:"+e);}}}System.out.println("Number:"+totalResults);ctx.close();}catch(NamingExceptione){e.printStackTrace();System.err.println("ThrowException:"+e);}}使用这样的代码输出的结果是:answernotnullExceptioninthread"main"java.lang.NullPointerExceptionfalse现在不知道怎么办了。我也弄不清楚是不是代码错了,请高手帮助下,如果有代码能直接读取出AD域服务器里的用户信息的就最好了。
解决方案
解决方案二:
哥会了,
解决方案三:
会了就好,恭喜~~
解决方案四:
能把正确的贴出来吗?
解决方案五:
能把解决方案代码发布出来吗
解决方案六:
整明白了,为了这个查了很多资料,主要是参数,错一个就得不到域信息,花了很多时间去了解ldap的参数规则,结合楼主的代码,成功验证。谢谢了.
解决方案七:
该回复于2012-03-22 09:22:53被版主删除
解决方案八:
3年前做过这样的事,Java直接读AD很麻烦后来通过.net读取,发布成webservice给java访问,简单很多
解决方案九:
麻烦楼主联系一下我,被这个问题折磨3个月了,由于是刚毕业没什么经验,老大整天催着赶活,快崩溃了,麻烦楼主给我看一下代码,我的QQ是81868464,麻烦你了,真的痛苦死了
解决方案十:
没有这个里边的代码好用,来这里看看,这个的代码我用过,可以建立开启用户,可以修改密码。http://download.csdn.net/detail/jungleroco1/7609967