六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 218|回复: 0

LDAP教程 转

[复制链接]

升级  62%

5

主题

5

主题

5

主题

童生

Rank: 1

积分
31
 楼主| 发表于 2013-1-14 22:35:03 | 显示全部楼层 |阅读模式
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
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表