`
wangguorui89
  • 浏览: 318360 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

JNDI 连接LDAP

    博客分类:
  • JNDI
 
阅读更多

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

分享到:
评论

相关推荐

    com.sun.jndi.ldap.jar

    JNDI的主要作用是将Java应用程序与各种不同的命名和目录服务连接起来,如DNS、NIS、Active Directory或OpenLDAP。通过JNDI,开发者可以使用统一的API来查找、操作和管理这些服务。`com.sun.jndi.ldap.jar`中的实现...

    JNDI访问LDAP

    在描述中提到的链接,虽然没有提供具体内容,但通常这类博客会详细介绍如何使用JNDI来连接和操作LDAP目录。常见的步骤可能包括: 1. **配置JNDI环境**:在Java应用中,需要设置JNDI的初始上下文(Initial Context)...

    基于JavaJNDI的LDAP Demo

    基于Java JNDI 操纵LDAP的基础实现,包括LDAP连接相关生命周期,认证的两种策略demo,条目的操作,schema的基础操作包括(attributeDefinition\objectDefinition\)但未包含相关syntaxDefinition的操纵. 没有资源分的朋友...

    jndi.zip_java ldap_jndi_jndi ldap_ldap_ldap java

    通过JNDI,Java开发者可以方便地与LDAP服务器进行交互,实现诸如连接、添加、删除、修改和搜索等操作。 1. **JNDI基础** JNDI是一个接口,提供了一种统一的方式来查找和管理各种命名和目录服务,包括 LDAP、DNS、...

    封装JNDI的LDAP服务器的工具类

    在IT行业中,JNDI(Java Naming and Directory Interface)是一个标准接口,用于访问各种命名和目录服务,如LDAP(Lightweight Directory Access Protocol)。本篇内容将深入探讨如何封装JNDI操作,以便更方便地与...

    java连接ldap所需jar包

    1. **JNDI(Java Naming and Directory Interface)**:Java连接LDAP的基础是JNDI,它为Java应用程序提供了一个统一的接口来访问不同的命名和目录服务,包括LDAP。JNDI允许开发者以一致的方式查找、绑定、更新和管理...

    jndi连接池帮助文档

    【JNDI连接池详解】 JNDI,全称为Java Naming and Directory Interface,是一种Java API,主要用于对象的命名和目录服务。它允许开发者在无需直接与底层命名服务器交互的情况下查找和使用注册的对象,降低了编程...

    封装jndi操作ldap服务器的工具类

    在Java开发中,直接使用JNDI API操作LDAP可能会涉及很多底层细节,包括连接设置、安全配置等,这增加了代码的复杂性和出错的可能性。因此,为了简化这一过程,通常会创建一个工具类来封装这些操作,使得开发者可以更...

    jndi之fsContext ldap

    提供了使用fsContext服务器的unbind bind list lookup rename的相关例子,及ldap 连接的一个例子 jndi,就是命名服务(n:naming)和目录服务(d:directory). 命名服务:把对象映射到方便记忆的名字的机制.可以通过域名系统...

    java 连接ldap 服务器源码

    Java连接LDAP服务器是一种常见的任务,尤其在企业级应用中,用于身份验证、用户管理或访问控制。LDAP(轻量级目录访问协议)是一种基于X.500标准的目录服务协议,它允许快速查找和管理分布式数据库中的信息。在Java...

    java连接LDAP的jar包和实例

    Java连接LDAP(Lightweight Directory Access Protocol)是一种常见的任务,用于在分布式环境中管理和访问目录服务信息。这个主题涉及几个关键知识点,包括Java LDAP API、SSL安全连接以及如何通过代码操作LDAP目录...

    java对LDAP的增删改查

    在 Java 中,开发者可以使用 JNDI 的 LDAP 实现来连接 LDAP 服务器,并执行各种操作。JNDI 提供了一个统一的接口来访问不同的目录服务,包括 LDAP、DNS、NIS 等。通过 JNDI,开发者可以使用 Java 语言来访问和操作 ...

    初学ldap和jndi

    以下是一个简单的示例代码,展示如何使用JNDI连接到LDAP服务器: ```java import javax.naming.Context; import javax.naming.NamingException; import javax.naming.directory.InitialDirContext; public class ...

    java链接ldap

    ht.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); ht.put(Context.PROVIDER_URL, "ldap://192.168.66.137:389"); ht.put(Context.SECURITY_AUTHENTICATION, "simple"); ht.put...

    SpringLDAP和JNDI的增删改查

    **Spring LDAP与JNDI:增删改查详解** 在Java开发中,当我们需要与目录服务进行交互,例如用户认证、权限管理等,Spring LDAP和Java Naming and Directory Interface (JNDI)是两个常用的技术。本文将通过一个入门级...

    rmi-jndi-ldap-jrmp-jmx-jms:rmi,jndi,ldap,jrmp,jmx,jms一些演示测试

    在IT领域,特别是Java开发中,`RMI`(Remote Method Invocation)、`JNDI`(Java Naming and Directory Interface)、`LDAP`(Lightweight Directory Access Protocol)、`JRMP`(Java Remote Method Protocol)、`...

    JNDI Java操作示例

    JNDI提供了与LDAP集成的能力,使得Java程序能够轻松地访问和管理LDAP服务器上的数据。 #### 三、示例代码解析 在给定的部分内容中,我们看到的是一个典型的JNDI操作示例。首先,定义了环境变量`env`,并初始化了...

    LDAP搭建及其Java代码连接

    **LDAP搭建及其Java代码连接** LDAP(Lightweight Directory Access Protocol)是一种轻量级目录访问协议,主要用于存储和检索用户信息、组织结构等元数据。它采用层次化的树状结构,便于管理和查找。在IT领域,...

Global site tag (gtag.js) - Google Analytics