`
xfbbsnet
  • 浏览: 93375 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论
阅读更多
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.zip_SSHA_java SSHA_ssha加密

    在本教程中,我们将深入探讨SSHA加密以及如何在Java环境中实现SSHA加密。 1. **SSHA加密原理**: - **SHA(Secure Hash Algorithm)** 是一种非对称加密算法,它将任意长度的数据转化为固定长度的哈希值,具有不...

    游戏服务器架设教程

    2. 认证设置:使用认证软件,例如 SSH、LDAP 等,限制访问游戏服务器和数据库服务器的权限。 3. 加密设置:使用加密软件,例如 SSL/TLS 等,保护数据传输的安全。 六、总结 游戏服务器架设需要考虑硬件安装、系统...

    PDI.pptx Kettle的Spoon使用教程(包括carte,pan,kitchen)

    2. **Transformation转换**:Transformation描述了数据流,从各种源读取数据,如Excel、多种数据库、文本格式和Ldap,经过转换后加载到目标位置,是ETL的核心部分。 【Spoon工具】 Spoon是PDI的集成开发环境,提供...

    Kettle入门基础教程

    - **LDAPInput**: 从LDAP服务器读取数据。 - **LDIFInput**: 从LDIF文件读取数据。 - **MondrianInput**: 从Mondrian OLAP服务器读取数据。 - **PropertyInput**: 从属性文件读取数据。 - **StreamingXMLInput**: 从...

    php教程,php总结笔记教程.pdf

    3. **网络协议**:PHP可以与各种协议(如LDAP、IMAP、SNMP等)进行通信,甚至可以通过原始网络端口处理其他协议。 4. **数据交换**:PHP支持WDDX,可以与其他Web开发语言交换复杂数据。它还能够与Java对象即时连接...

    Cognos中级培训教程(1).ppt

    教程涉及了多种类型的名字空间,如Active Directory Server、Cognos Series 7、LDAP等,并解释了如何根据不同的身份验证服务来配置相应的设置。 **2.3 分配内存** Cognos的性能很大程度上取决于内存分配。教程列出...

    Kettle初级教程(入门级详细解析各个控件)

    - **LDAPInput**:从LDAP服务器读取数据。 - **LDIFInput**:从LDIF文件读取数据。 - **MondrianInput**:从Mondrian数据源读取数据。 - **PropertyInput**:从属性文件读取数据。 - **StreamingXMLInput**:...

    Cognos中级培训教程.ppt

    配置名字空间涉及多种身份验证方式,如Active Directory Server、LDAP等,这有助于根据组织的实际情况选择合适的用户认证方法。内存分配部分则涵盖了小型、中型和大型配置的默认值和可调整范围,以满足不同规模系统...

    Ubuntu系统下Pure-ftpd的安装及配置教程.docx

    Ubuntu系统下Pure-ftpd的安装及配置教程 Pure-FTPd是 Ubuntu系统下的一款功能强大且灵活的FTP服务器软件,本文将对其安装和配置进行详细介绍。 安装Pure-FTPd Ubuntu/Debian系统提供了三个不同的Pure-FTPd安装包...

    Spring3 Security中文教程

    这个中文教程全面地介绍了如何使用Spring Security来保护你的应用程序,确保只有授权的用户能够访问特定的资源。Spring Security提供了一整套强大且灵活的安全控制机制,包括身份验证、授权、会话管理以及防止各种...

    DNS就是Domain Name System,它能够把

    压缩包中的文件可能与DNS无关,如"心芯教程说明.txt"可能是某个教程的介绍,"软件说明.txt"可能是关于软件功能和使用的说明,"教程1.exe"可能是一个教学程序,"一起下载吧首页.url"和"网络安全网-网络安全技术学习,...

    Serenity开源框架中文文档PDF

    文档提供了关于如何使用其他类型数据库、如何使用Active Directory或LDAP进行身份验证以及如何设置数据库方言的相关信息。 10. 在前端功能定制方面,文档详细介绍了如何删除网格中的新增按钮、如何使用SlickGrid...

    TDI开发教程.pdf

    本教程主要介绍如何使用TDI进行XML流水线文件的开发,包括添加、修改、删除和协调XML文件,以及打包、上传、创建服务、定制表单和测试等步骤。 1. **开发XML流水线文件** - **添加账户流水线XML文件开发**:首先...

    Kettle 3.0 使用手册

    Kettle 3.0 使用手册为用户提供了全面的基础教程,旨在帮助初学者快速掌握Kettle的基本操作及高级功能,加速学习进程。 #### 二、核心变化与新增功能 **1. 新的核心API** - **数据与元数据分离** - 在Kettle 3.0...

    CentOS6.5下openldap安装源码

    关键步骤包括:安装必要的软件包、配置LDAP服务器、加密管理员密码、配置`slapd.conf`文件、安装并配置迁移工具以迁移系统用户和组信息到LDAP中。这些操作确保了OpenLDAP在CentOS 6.5环境中能够正常运行,并且能够...

    openLDAP for windows.7z

    OpenLDAP(Lightweight Directory Access Protocol)是一款开源的LDAP(轻量级目录访问协议)服务器,广泛用于组织和管理网络中的用户、系统、服务等资源。它支持多种操作系统,包括Windows。在Windows环境下部署...

    data-integration_7.1使用手册

    LDAPInput步骤用于读取LDAP信息;LDIFInput步骤用于读取LDIF格式的数据;LoadFileContentInMemory步骤用于将文件内容加载到内存;MicrosoftAccessInput步骤用于读取Microsoft Access数据库;MicrosoftExcelInput步骤...

    BI银行系统架构培训教程

    - **LDAP**: 轻量级目录访问协议,用于用户身份验证。 #### 四、商业银行BI架构体系 **4.1 架构体系理论** - **架构体系理论**为构建高效的BI系统提供了理论基础。 - **架构设计方法**指导如何有效地设计和实施BI...

    网康进阶之ICG教程大全.zip

    网康进阶之ICG教程大全 【网康进阶之ICG-7.0】LDAP导入配置指导.pdf 【网康进阶之ICG】-01-升级版本 V7.0.pdf 【网康进阶之ICG】-02-URL库升级 V7.0.pdf 【网康进阶之ICG】-03-应用协议库升级 V7.0.pd ...

Global site tag (gtag.js) - Google Analytics