使用java去读取AD域里面的用户名等信息。

问题描述

客户要求将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

时间: 2024-09-20 14:34:45

使用java去读取AD域里面的用户名等信息。的相关文章

java javascript-如何用java去读取FTP下的文件目录,可以手动选择文件上传路径

问题描述 如何用java去读取FTP下的文件目录,可以手动选择文件上传路径 如何用JAVA实现在本地浏览器点击添加按钮,跳转到FTP服务器的目录下,可以浏览FTP目录,选择需要的文件,然后把路径+文件名添加到input中,后台或js怎么实现?

使用java连接AD域,验证账号密码是否正确

web项目中有时候客户要求我们使用ad域进行身份确认,不再另外做一套用户管理系统.其实客户就是只要一套账号可以访问所有的OA,CRM等办公系统. 这就是第三方验证.一般有AD域,Ldap,Radius,邮件服务器等.最常用的要数AD域了.因为window系统在国内占据了大量的江山.做起来也很方便. 我这篇文章就是写,如何用java去实现AD域的身份验证.好了,直接看代码吧: package com.test; import java.util.Hashtable; import javax.na

php获取ad域用户:PHP 读取 AD 用户

<?php  //phpinfo();  $host = "******:389";  $user = "**@**";  $pswd = "*****";  $ad = ldap_connect($host) or die( "Could not connect!" );  if($ad){  //设置参数  ldap_set_option ( $ad, LDAP_OPT_PROTOCOL_VERSION, 3 ); 

Java中利用jcifs集成AD域用户认证

最近一段时间发现AD这东西老火了,尤其是涉及到安全这一方面的,所以AD域用户认证成了现在网络安全方面的产品必备!这里就简单的分享一下,Java通过jcifs集成AD域用户实现认证,以实现网络安全! 我们通过一个demo来看看jcifs实现SSO,SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制.它是目前比较流行的企业业务整合的解决方案之一. 第一

java通过ldap修改ad域用户密码问题

问题描述 java通过ldap修改ad域用户密码问题 java通过ldap修改ad域用户密码问题.做过这个东西的朋友,我需要帮助. 解决方案 Java使用LdAP获取AD域用户用JAVA通过LDAP修改AD用户密码注意事项Java添加.修改MS AD用户密码

java操作AD域 jar包 标题要长长长

问题描述 java操作AD域 jar包 标题要长长长 java有没有操作AD域用的三方jar包啊 还是说现在只能用jndi? 哪位大婶有的给介绍一个啊

使用JAVA进行ad域身份验证常用属性详解

一些变态的公司经常对开发者提出一些变态的问题.比如在oa系统中,要求登录验证必须使用ad域进行登录.还有的如登录crm系统必须使用公司的阿里云邮箱账号进行身份验证等等. 作为程序员我们只能按照客户的需求进行完善系统.毕竟客户才是我们的衣食父母,没办法拒绝.我这里就列举一些,在系统中集成ad域身份验证的一些配置信息,并一一解释他们的作用. 直接看代码: public boolean login() { // 判断必填字段是否全部填写 if (StringUtils.isEmpty(this.use

AD域的另一种渗透姿势:Kerberoast

本文讲的是AD域的另一种渗透姿势:Kerberoast,译者注:建议读者在阅读此文之前,最好先去了解一下Kerberos协议的通信过程和"黄金票证","白银票证","万能钥匙"的攻击原理和方法以及"Mimikatz"的一些用法. 可以参考以下几篇文章: 域渗透的金之钥匙 – Mickey http://t.cn/RJkooX3 Mimikatz 非官方指南和命令参考Part1-3 – Her0in Part.1 http://

详解Java程序读取properties配置文件的方法_java

在我们平时写程序的时候,有些参数是经常改变的,而这种改变不是我们预知的.比如说我们开发了一个操作数据库的模块,在开发的时候我们连接本地的数据库那么IP ,数据库名称,表名称,数据库主机等信息是我们本地的,要使得这个操作数据的模块具有通用性,那么以上信息就不能写死在程序里.通常我们的做法是用配置文件来解决. 各种语言都有自己所支持的配置文件类型.比如Python ,他支持.ini 文件.因为他内部有一个ConfigParser 类来支持.ini 文件的读写,根据该类提供的方法程序员可以自由的来操作