星空网 > 软件开发 > Java

LDAP开发小结

写在前面

由于最近的一个项目的需求是要是需要读取AD域里面的一些数据,然后保存到数据库中,所以对LDAP这个东西进行了一些研究。

    感谢以下链接提供的资料 :

    http://wibiline.iteye.com/blog/1840739

    http://aa00aa00.iteye.com/blog/1276936

    http://www.cnblogs.com/forbreak/archive/2012/10/30/2746464.html

    http://cgs1999.iteye.com/blog/1574635

    http://www.cnblogs.com/awpatp/archive/2010/02/14/1668097.html

 

项目需求

已知一个节点 "CN=Authorization2,CN=Program Data Test,DC=cayzlh,DC=com",需要得到节点下的某个节点里面的相关属性,然后提取出来,保存到数据库中。

LDAP开发小结

解决问题

  1. 获得LDAP连接

    1. public class LdapADHelper {
    2.    private final String URL = "ldap://"+"192.168.1.204:389";
    3.    private final String ADMINNAME = "test@test.com";
    4.    private final String ADMINPASSWORD = "test123";
    5.    private LdapContext ctx = null;
    6.  
    7.    public static LdapADHelper getInstance() throws NamingException{
    8.       return new LdapADHelper();
    9.  
    10.    }
    11.    private LdapADHelper () throws NamingException {
    12.       this.initLdap();
    13.    }
    14.    /**
    15.     * 初始化ldap
    16.     * @throws NamingException
    17.     */
    18.    private void initLdap() throws NamingException {
    19.       // ad服务器
    20.       Hashtable<String, String> HashEnv = new Hashtable<String, String>();
    21.       HashEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); // LDAP访问安全级别
    22.       HashEnv.put(Context.SECURITY_PRINCIPAL, this.ADMINNAME); // AD User
    23.       HashEnv.put(Context.SECURITY_CREDENTIALS, this.ADMINPASSWORD); // AD Password
    24.       HashEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); // LDAP工厂类
    25.       HashEnv.put(Context.PROVIDER_URL, this.URL);
    26.       try {
    27.          ctx = new InitialLdapContext(HashEnv, null);
    28.          System.out.println("初始化ldap成功!");
    29.       } catch (NamingException e) {
    30.          e.printStackTrace();
    31.          System.err.println("Throw Exception : " + e);
    32.          throw e;
    33.       }
    34.    }
    35.    ....
    36. }

在外部类中调用这个类的getInstance()方法则可以得到helper对象并初始化好了LdapContext对象

  1. 查询对象属性

    1. try {
    2.    // 域节点
    3.    String searchBase = this.getBaseDnForRoleObject("CN=角色1,CN=RoleObjectDemo2,CN=msDS-AzApplicationTest2,CN=Authorization2,CN=Program Data Test,DC=cayzlh,DC=com");
    4.    // LDAP搜索过滤器类
    5.    String searchFilter = "(cn=*)";
    6.    // 创建搜索控制器
    7.    SearchControls searchCtls = new SearchControls();
    8.    // 设置搜索范围
    9.    searchCtls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
    10.    String returnedAtts[] = { "distinguishedName " }; // 定制返回属性, 这里只需要查询 角色1 这个对象的 distinguishedName 属性
    11.    searchCtls.setReturningAttributes(returnedAtts); // 设置返回属性集
    12.    // 不设置则返回所有属性
    13.    // 根据设置的域节点、过滤器类和搜索控制器搜索LDAP得到结果
    14.    NamingEnumeration<?> answer = ctx.search(searchBase, searchFilter, searchCtls);// Search
    15.  
    16.    while (answer.hasMoreElements()) {// 遍历结果集
    17.       // 得到符合搜索条件的DN
    18.       SearchResult sr = (SearchResult) answer.next();
    19.       // 得到符合条件的属性集
    20.       Attributes attrs = sr.getAttributes();
    21.       if (attrs != null) {
    22.          try {
    23.             if ( attrs.getAll().hasMore() ) {
    24.                Attribute attr = (Attribute) ne.next();// 得到下一个属性
    25.                System.out.println(attr.getAll().next().toString());
    26.                // 这里输出得到的就是 角色1 的distinguishedName 属性,如果要获取有多个值的属性, 则可以利用循环和next()方法来获取得到这个属性的所有值
    27.             }
    28.          } catch (NamingException e) {
    29.             e.printStackTrace();
    30.             System.err.println("Throw Exception : " + e);
    31.          }
    32.       }
    33.    }
    34. } catch (NamingException e) {
    35.    System.err.println("Throw Exception : " + e);
    36. }

工具

在开发过程中使用的工具是 ADSI编辑器在域服务中进行查看和编辑相应的属性。打开方式如图所示:

    LDAP开发小结

源代码

写了一份简单的demo,是web版的,也许有些问题,稍微改一下就可以了。又需要的可以下载来玩玩。。

下载地址:http://files.cnblogs.com/files/chenanyu/LdapTest.zip

LDAP开发小结

好久好久没有发过博客,不足之处见谅。。




原标题:LDAP开发小结

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

新店运营指南第九期 - FB入池规则、标准:https://www.kjdsnews.com/a/1698259.html
韩媒:速卖通成为今年韩国新增用户最多的App:https://www.kjdsnews.com/a/1698260.html
“非洲渔王”上阿里国际站:2年打开欧洲、中东、中美洲等新市场:https://www.kjdsnews.com/a/1698261.html
从搜索到社交,这些独立站引流技巧帮你实现爆款成功!:https://www.kjdsnews.com/a/1698262.html
APP出海:洞察移动应用海内外市场的差异与应对策略:https://www.kjdsnews.com/a/1698263.html
亚马逊新工具!又是利好服装卖家?:https://www.kjdsnews.com/a/1698264.html
仿品独立站从建站、推广、收款到底怎么玩?:https://www.kjdsnews.com/a/1836312.html
仿品独立站从建站、推广、收款到底怎么玩?:https://www.goluckyvip.com/news/186215.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流