WINDOWS下搭建LDAP服务器 | RFC 855----Telnet选项说明书 2009
-07-07JNDI 连接Windows Active Directory 教程http://www.matrix.org.cn/resource/article/2007-03-05/JNDI+AD_ea943628-cab3-11db-b4f4-dd5a5e123c5c.html
http://www.javaworld.com.tw/jute/post/view?bid=7&id=164710&sty=1&tpg=1&age=0
JNDI, Active Directory, Paging and Range Retrieval
JNDI, Active Directory, Referrals and Global Catalog
JNDI, Active Directory (Creating new users & demystifying userAccountControl)
JNDI, Active Directory & Changing Passwords
JNDI, Active Directory and Group Memberships
JNDI, Active Directory and objectGUID's
JNDI, Active Directory and SID's (Security Identifiers)
JNDI, Active Directory and Error codes
JNDI, Active Directory and Server Side Sorting
JNDI, Active Directory & Persistent Searches (part 1)
JNDI, Active Directory and Persistent Searches (part 2)
Sample code demonstrating a search for disabled accounts.
JNDI, Active Directory and User Account status (account expired, locked)
JNDI, Active Directory and Authentication (part 5, LDAP Fastbinds)
jndi sun的教程
http://java.sun.com/developer/technicalArticles/Programming/jndi/index.html
用ldap方式访问AD域的的错误解释
用ldap方式访问AD域的的错误一般会如下格式:
LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 52e, vece
其中红字部分的意思如下:
525 - 用户没有找到
52e - 证书不正确
530 - not permitted to logon at this time
532 - 密码期满
533 - 帐户不可用
701 - 账户期满
773 - 用户必须重设密码
Java代码
1.import java.util.Hashtable;
2.import javax.naming.Context;
3.import javax.naming.ldap.LdapContext;
4.import javax.naming.ldap.InitialLdapContext;
5.import javax.naming.NamingEnumeration;
6.import javax.naming.directory.SearchControls;
7.import javax.naming.directory.SearchResult;
8.import javax.naming.NamingException;
9.import javax.naming.directory.Attribute;
10.import javax.naming.directory.Attributes;
11.import java.util.Enumeration;
12.
13.public class ADOperTest {
14. public ADOperTest() {
15. }
16.
17. public void GetADInfo() {
18. Hashtable HashEnv = new Hashtable();
19.
20. String LDAP_URL = "ldap://192.168.100.3:389"; //LDAP访问地址
21. //String adminName = "CN=OAWebUser,CN=Users,DC=Hebmc,DC=com";//AD的用户名
22. String adminName = "Hebmc\\OAWebUser"; //注意用户名的写法:domain\User 或 User@domain.com
23. adminName = "OAWebUser@Hebmc.com"; //注意用户名的写法:domain\User 或 User@domain.com
24. String adminPassword = "chenzuooaup02"; //密码
25.
26. HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); //LDAP访问安全级别
27. HashEnv.put(Context.SECURITY_PRINCIPAL, adminName); //AD User
28. HashEnv.put(Context.SECURITY_CREDENTIALS, adminPassword); //AD Password
29. HashEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); //LDAP工厂类
30. HashEnv.put(Context.PROVIDER_URL, LDAP_URL);
31.
32. try {
33. LdapContext ctx = new InitialLdapContext(HashEnv, null);
34. SearchControls searchCtls = new SearchControls(); //Create the search controls
35. searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); //Specify the search scope
36.
37. String searchFilter = "objectClass=User"; //specify the LDAP search filter
38. //String searchFilter = "objectClass=organizationalUnit";//specify the LDAP search filter
39.
40. String searchBase = "DC=Hebmc,DC=com"; //Specify the Base for the search//搜索域节点
41. int totalResults = 0;
42.
43. //Specify the attributes to return
44. //String returnedAtts[] = {"memberOf"};//定制返回属性
45. String returnedAtts[] = {
46. "url", "whenChanged", "employeeID", "name", "userPrincipalName",
47. "physicalDeliveryOfficeName", "departmentNumber", "telephoneNumber",
48. "homePhone", "mobile", "department", "sAMAccountName", "whenChanged",
49. "mail"}; //定制返回属性
50.
51. searchCtls.setReturningAttributes(returnedAtts); //设置返回属性集
52.
53. //Search for objects using the filter
54. NamingEnumeration answer = ctx.search(searchBase, searchFilter,searchCtls);
55.
56. while (answer.hasMoreElements()) {
57. SearchResult sr = (SearchResult) answer.next();
58. System.out.println("************************************************");
59. System.out.println(sr.getName());
60.
61. Attributes Attrs = sr.getAttributes();
62. if (Attrs != null) {
63. try {
64. for (NamingEnumeration ne = Attrs.getAll(); ne.hasMore(); ) {
65. Attribute Attr = (Attribute) ne.next();
66.
67. System.out.println(" AttributeID=" + Attr.getID().toString());
68.
69. //读取属性值
70. for (NamingEnumeration e = Attr.getAll(); e.hasMore();totalResults++) {
71. System.out.println(" AttributeValues=" + e.next().toString());
72. }
73. System.out.println(" ---------------");
74.
75. //读取属性值
76. Enumeration values = Attr.getAll();
77. if (values != null) { // 迭代
78. while (values.hasMoreElements()) {
79. System.out.println(" AttributeValues=" + values.nextElement());
80. }
81. }
82. System.out.println(" ---------------");
83. }
84. }
85. catch (NamingException e) {
86. System.err.println("Throw Exception : " + e);
87. }
88. }
89. }
90. System.out.println("Number: " + totalResults);
91. ctx.close();
92. }
93.
94. catch (NamingException e) {
95. e.printStackTrace();
96. System.err.println("Throw Exception : " + e);
97. }
98. }
99.
100. public static void main(String args[]) {
101. ADOperTest ad = new ADOperTest();
102. ad.GetADInfo();
103. }
104.}
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.ldap.LdapContext;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.NamingEnumeration;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import java.util.Enumeration;
public class ADOperTest {
public ADOperTest() {
}
public void GetADInfo() {
Hashtable HashEnv = new Hashtable();
String LDAP_URL = "ldap://192.168.100.3:389"; //LDAP访问地址
//String adminName = "CN=OAWebUser,CN=Users,DC=Hebmc,DC=com";//AD的用户名
String adminName = "Hebmc\\OAWebUser"; //注意用户名的写法:domain\User 或 User@domain.com
adminName = "OAWebUser@Hebmc.com"; //注意用户名的写法:domain\User 或 User@domain.com
String adminPassword = "chenzuooaup02"; //密码
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, LDAP_URL);
try {
LdapContext ctx = new InitialLdapContext(HashEnv, null);
SearchControls searchCtls = new SearchControls(); //Create the search controls
searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE); //Specify the search scope
String searchFilter = "objectClass=User"; //specify the LDAP search filter
//String searchFilter = "objectClass=organizationalUnit";//specify the LDAP search filter
String searchBase = "DC=Hebmc,DC=com"; //Specify the Base for the search//搜索域节点
int totalResults = 0;
//Specify the attributes to return
//String returnedAtts[] = {"memberOf"};//定制返回属性
String returnedAtts[] = {
"url", "whenChanged", "employeeID", "name", "userPrincipalName",
"physicalDeliveryOfficeName", "departmentNumber", "telephoneNumber",
"homePhone", "mobile", "department", "sAMAccountName", "whenChanged",
"mail"}; //定制返回属性
searchCtls.setReturningAttributes(returnedAtts); //设置返回属性集
//Search for objects using the filter
NamingEnumeration answer = ctx.search(searchBase, searchFilter,searchCtls);
while (answer.hasMoreElements()) {
SearchResult sr = (SearchResult) answer.next();
System.out.println("************************************************");
System.out.println(sr.getName());
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++) {
System.out.println(" AttributeValues=" + e.next().toString());
}
System.out.println(" ---------------");
//读取属性值
Enumeration values = Attr.getAll();
if (values != null) { // 迭代
while (values.hasMoreElements()) {
System.out.println(" AttributeValues=" + values.nextElement());
}
}
System.out.println(" ---------------");
}
}
catch (NamingException e) {
System.err.println("Throw Exception : " + e);
}
}
}
System.out.println("Number: " + totalResults);
ctx.close();
}
catch (NamingException e) {
e.printStackTrace();
System.err.println("Throw Exception : " + e);
}
}
public static void main(String args[]) {
ADOperTest ad = new ADOperTest();
ad.GetADInfo();
}
}
备注:
使用LADP访问AD,注意用户名的写法:domain\User 或 User@domain.com。
如用户名不正确,则可能会出现如下异常:
javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 525, vece
分享到:
相关推荐
在本教程中,我们将深入探讨SSHA加密以及如何在Java环境中实现SSHA加密。 1. **SSHA加密原理**: - **SHA(Secure Hash Algorithm)** 是一种非对称加密算法,它将任意长度的数据转化为固定长度的哈希值,具有不...
2. 认证设置:使用认证软件,例如 SSH、LDAP 等,限制访问游戏服务器和数据库服务器的权限。 3. 加密设置:使用加密软件,例如 SSL/TLS 等,保护数据传输的安全。 六、总结 游戏服务器架设需要考虑硬件安装、系统...
2. **Transformation转换**:Transformation描述了数据流,从各种源读取数据,如Excel、多种数据库、文本格式和Ldap,经过转换后加载到目标位置,是ETL的核心部分。 【Spoon工具】 Spoon是PDI的集成开发环境,提供...
- **LDAPInput**: 从LDAP服务器读取数据。 - **LDIFInput**: 从LDIF文件读取数据。 - **MondrianInput**: 从Mondrian OLAP服务器读取数据。 - **PropertyInput**: 从属性文件读取数据。 - **StreamingXMLInput**: 从...
3. **网络协议**:PHP可以与各种协议(如LDAP、IMAP、SNMP等)进行通信,甚至可以通过原始网络端口处理其他协议。 4. **数据交换**:PHP支持WDDX,可以与其他Web开发语言交换复杂数据。它还能够与Java对象即时连接...
教程涉及了多种类型的名字空间,如Active Directory Server、Cognos Series 7、LDAP等,并解释了如何根据不同的身份验证服务来配置相应的设置。 **2.3 分配内存** Cognos的性能很大程度上取决于内存分配。教程列出...
- **LDAPInput**:从LDAP服务器读取数据。 - **LDIFInput**:从LDIF文件读取数据。 - **MondrianInput**:从Mondrian数据源读取数据。 - **PropertyInput**:从属性文件读取数据。 - **StreamingXMLInput**:...
配置名字空间涉及多种身份验证方式,如Active Directory Server、LDAP等,这有助于根据组织的实际情况选择合适的用户认证方法。内存分配部分则涵盖了小型、中型和大型配置的默认值和可调整范围,以满足不同规模系统...
Ubuntu系统下Pure-ftpd的安装及配置教程 Pure-FTPd是 Ubuntu系统下的一款功能强大且灵活的FTP服务器软件,本文将对其安装和配置进行详细介绍。 安装Pure-FTPd Ubuntu/Debian系统提供了三个不同的Pure-FTPd安装包...
这个中文教程全面地介绍了如何使用Spring Security来保护你的应用程序,确保只有授权的用户能够访问特定的资源。Spring Security提供了一整套强大且灵活的安全控制机制,包括身份验证、授权、会话管理以及防止各种...
压缩包中的文件可能与DNS无关,如"心芯教程说明.txt"可能是某个教程的介绍,"软件说明.txt"可能是关于软件功能和使用的说明,"教程1.exe"可能是一个教学程序,"一起下载吧首页.url"和"网络安全网-网络安全技术学习,...
文档提供了关于如何使用其他类型数据库、如何使用Active Directory或LDAP进行身份验证以及如何设置数据库方言的相关信息。 10. 在前端功能定制方面,文档详细介绍了如何删除网格中的新增按钮、如何使用SlickGrid...
本教程主要介绍如何使用TDI进行XML流水线文件的开发,包括添加、修改、删除和协调XML文件,以及打包、上传、创建服务、定制表单和测试等步骤。 1. **开发XML流水线文件** - **添加账户流水线XML文件开发**:首先...
Kettle 3.0 使用手册为用户提供了全面的基础教程,旨在帮助初学者快速掌握Kettle的基本操作及高级功能,加速学习进程。 #### 二、核心变化与新增功能 **1. 新的核心API** - **数据与元数据分离** - 在Kettle 3.0...
关键步骤包括:安装必要的软件包、配置LDAP服务器、加密管理员密码、配置`slapd.conf`文件、安装并配置迁移工具以迁移系统用户和组信息到LDAP中。这些操作确保了OpenLDAP在CentOS 6.5环境中能够正常运行,并且能够...
OpenLDAP(Lightweight Directory Access Protocol)是一款开源的LDAP(轻量级目录访问协议)服务器,广泛用于组织和管理网络中的用户、系统、服务等资源。它支持多种操作系统,包括Windows。在Windows环境下部署...
LDAPInput步骤用于读取LDAP信息;LDIFInput步骤用于读取LDIF格式的数据;LoadFileContentInMemory步骤用于将文件内容加载到内存;MicrosoftAccessInput步骤用于读取Microsoft Access数据库;MicrosoftExcelInput步骤...
- **LDAP**: 轻量级目录访问协议,用于用户身份验证。 #### 四、商业银行BI架构体系 **4.1 架构体系理论** - **架构体系理论**为构建高效的BI系统提供了理论基础。 - **架构设计方法**指导如何有效地设计和实施BI...
网康进阶之ICG教程大全 【网康进阶之ICG-7.0】LDAP导入配置指导.pdf 【网康进阶之ICG】-01-升级版本 V7.0.pdf 【网康进阶之ICG】-02-URL库升级 V7.0.pdf 【网康进阶之ICG】-03-应用协议库升级 V7.0.pd ...