LDAP资料介绍可以参考:http://wenku.baidu.com/view/262742f9f705cc17552709f9.html
ldap访问AD域的的错误一般会如下格式:
Ldap load error: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 525, vece]
其中红字部分的意思如下(这些错误码跟语言无关):
525 - 用户没有找到
52e - 证书不正确
530 - not permitted to logon at this time
532 - 密码期满
533 - 帐户不可用
701 - 账户期满
773 - 用户必须重设密码
import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import javax.naming.ldap.InitialLdapContext; import javax.naming.ldap.LdapContext; public class LdapADHelper { public LdapADHelper() { } private String host,url,adminName,adminPassword; private LdapContext ctx = null; /** * 初始化ldap */ public void initLdap(){ //ad服务器 this.host = "xxx.com"; // AD服务器 this.url = new String("ldap://" + host );//默认端口为80的可以不用填写,其他端口需要填写,如ldap://xxx.com:8080 this.adminName = "admin@xxx.com";// 注意用户名的写法:domain\User 或 User@domain.com this.adminPassword = "admin"; Hashtable HashEnv = new Hashtable(); HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); // LDAP访问安全级别 HashEnv.put(Context.SECURITY_PRINCIPAL, adminName); // AD User HashEnv.put(Context.SECURITY_CREDENTIALS, adminPassword); // AD Password HashEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); // LDAP工厂类 HashEnv.put(Context.PROVIDER_URL, url); try { ctx = new InitialLdapContext(HashEnv, null); System.out.println("初始化ldap成功!"); } catch (NamingException e) { e.printStackTrace(); System.err.println("Throw Exception : " + e); } } /** * 关闭ldap */ public void closeLdap(){ try { this.ctx.close(); } catch (NamingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * * @param type organizationalUnit:组织架构 group:用户组 user|person:用户 * @param name * @return */ public String GetADInfo(String type ,String filter ,String name) { String userName = name; // 用户名称 if (userName == null) { userName = ""; } String company = ""; String result = ""; try { // 域节点 String searchBase = "DC=xx,DC=xxx,DC=com"; // LDAP搜索过滤器类 //cn=*name*模糊查询 cn=name 精确查询 // String searchFilter = "(objectClass="+type+")"; String searchFilter = "(&(objectClass="+type+")("+filter+"=*" + name + "*))"; // 创建搜索控制器 SearchControls searchCtls = new SearchControls(); // 设置搜索范围 searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); // String returnedAtts[] = { "memberOf" }; // 定制返回属性 // searchCtls.setReturningAttributes(returnedAtts); // 设置返回属性集 不设置则返回所有属性 // 根据设置的域节点、过滤器类和搜索控制器搜索LDAP得到结果 NamingEnumeration answer = ctx.search(searchBase, searchFilter,searchCtls);// Search for objects using the filter // 初始化搜索结果数为0 int totalResults = 0;// Specify the attributes to return int rows = 0; while (answer.hasMoreElements()) {// 遍历结果集 SearchResult sr = (SearchResult) answer.next();// 得到符合搜索条件的DN ++rows; String dn = sr.getName(); System.out.println(dn); Attributes Attrs = sr.getAttributes();// 得到符合条件的属性集 if (Attrs != null) { try { for (NamingEnumeration ne = Attrs.getAll(); ne.hasMore();) { Attribute Attr = (Attribute) ne.next();// 得到下一个属性 System.out.println(" AttributeID=属性名:"+ Attr.getID().toString()); // 读取属性值 for (NamingEnumeration e = Attr.getAll(); e.hasMore(); totalResults++) { company = e.next().toString(); System.out.println(" AttributeValues=属性值:"+ company); } System.out.println(" ---------------"); } } catch (NamingException e) { System.err.println("Throw Exception : " + e); } }// if }// while System.out.println("************************************************"); System.out.println("Number: " + totalResults); System.out.println("总共用户数:"+rows); } catch (NamingException e) { e.printStackTrace(); System.err.println("Throw Exception : " + e); } return result; } public static void main(String args[]) { // 实例化 LdapADHelper ad = new LdapADHelper(); ad.initLdap(); ad.GetADInfo("user","cn","李XX");//查找用户 ad.GetADInfo("organizationalUnit","ou","工程");//查找组织架构 ad.GetADInfo("group","cn","福建xxx");//查找用户组 ad.closeLdap(); } }
相关推荐
Spring Security是一个强大的安全框架,它可以处理认证和授权,而与LDAP的结合则允许从目录服务器获取用户信息,进行身份验证和授权。 在“Springboot-LDAP针对AD域控做用户和组织进行同步”的场景中,开发人员会...
`LdapAuthenticationProvider`负责从AD服务器获取用户信息并进行密码验证。 ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired ...
通过Python,基于ldap3来实现操作AD域控,账户信息获取、解锁账户、禁用账户、启用账户、重置密码等功能。
Java 使用 LDAP 修改 AD 域用户密码 本文将详细介绍如何使用 Java 语言通过 LDAP 协议修改 Windows Active Directory 域用户的密码。同时,本文也将对相关概念进行解释,以便读者更好地理解整个过程。 LDAP 概念 ...
- **初始化连接**:使用`ldap.initialize()`方法创建LDAP连接对象,并设置协议版本为3。 - **简单绑定**:通过`simple_bind_s()`方法以管理员身份登录,成功后输出“ldap connect successfully”。 ##### 搜索过滤...
1. ADOperator.java:这个文件很可能包含了一个操作AD的类,可能实现了连接AD、执行查询、修改目录信息等操作。在Java中,通常会使用JNDI(Java Naming and Directory Interface)库来实现与LDAP的交互。例如,创建...
例如,为了验证用户身份,可以使用AD的认证服务,或者查询AD获取用户权限。集成的关键在于理解AD的架构,包括域、组织单位(OU)、全局编录等概念,并能正确构建和解析AD的DN(Distinguished Name)。 3. **LDAP...
1. **初始化LDAP连接**:创建一个`LDAP*`类型的指针,然后使用`ldap_init()`函数初始化连接。传入AD服务器的DNS名称和端口号(默认的LDAPS端口是636)。 ```cpp LDAP* ldapHandle = NULL; ldapHandle = ldap_...
Adldap2, 用于人类的PHP LDAP包 Adldap2 使用LDAP不需要硬处理。Adldap2是一个经过测试的PHP包,它使用 Active Record Pattern 提供LDAP身份验证和目录管理工具。索引快速入门配置文件连接认证查
8、在编写 Java 代码时,需要使用 Hashtable 对象来存储 LDAP 连接的参数,使用 Socket 对象来连接 LDAP 服务器,并使用 SSL/TLS 加密协议来确保密码修改的安全性。 9、在编写 Java 代码时,需要使用相关的 LDAP ...
使用`python-ldap`进行域认证,首先需要连接到LDAP服务器,然后执行搜索操作以找到用户账户,最后进行绑定。以下是一个简单的示例代码: ```python import ldap # 连接 LDAP 服务器 l = ldap.initialize('ldap://...
2. **LDAP (Lightweight Directory Access Protocol)**:轻量级目录访问协议,用于访问和管理存储在目录服务中的信息,是访问 AD 的主要协议之一。 3. **JNDI (Java Naming and Directory Interface)**:Java 命名和...
这些功能通常用于大型企业的用户管理,例如Active Directory(AD)服务。 首先,让我们理解LDAP。LDAP是一种目录服务协议,它允许快速查找分布式数据库中的信息,如用户账户、组、资源等。在Java中,我们可以使用...
1. **连接设置**:在LdapBrowser中输入服务器地址、端口、认证方式等信息,建立连接。 2. **浏览目录**:展开目录树,查看各个条目及其属性。 3. **搜索操作**:利用过滤器查找特定条目,可以按名称、属性值等条件...
Java 使用 LDAP 修改 AD 域中的用户密码需要满足一定的环境要求,包括安装 Active Directory 域控制器、证书服务和 Java 运行环境。然后,需要使用 Java 语言编写代码来实现 LDAP 修改用户密码的操作。这个操作需要...
当WebLogic Server配置为使用AD进行身份验证时,它会查询AD目录来验证用户的凭据,并获取用户的权限信息。这通常通过配置WebLogic的域安全策略实现,包括设置域的全局安全性、定义认证提供者、配置安全 Realm 和角色...
本项目标题为“获取AD帐号用户邮箱源码”,意味着我们要讨论如何通过编程方式从AD中检索用户账户信息,并特别关注用户的电子邮件地址。这里我们将详细探讨相关知识点,包括AD的基本概念、访问AD的API、编程语言的...
删除用户则需要获取用户对象的DirectoryEntry实例,然后调用Remove方法。例如: ```csharp var container = new DirectoryEntry("LDAP://OU=Users,DC=yourdomain,DC=com"); var user = container.Invoke("Create...