欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JAVA_基本LDAP操作实例

程序员文章站 2023-12-21 09:25:40
一、简介 lightweight directory access protocol (ldap),轻型目录访问协议是一个访问在线目录服务的协议。下面的例子中简单介绍在...

一、简介

lightweight directory access protocol (ldap),轻型目录访问协议是一个访问在线目录服务的协议。下面的例子中简单介绍在java中队ldap的增删该查功能。目录结构为:

cd=cas,dc=mydc

--cn=users

----uid=zhangsan

二、示例
1、通过ldapcontext连接ldap

复制代码 代码如下:

/**
 * 连接ldap
 */ 
@suppresswarnings({ "rawtypes", "unchecked" }) 
public ldapcontext connetldap() throws namingexception { 
    // 连接ldap需要的信息 
    string ldapfactory = "com.sun.jndi.ldap.ldapctxfactory"; 
    string ldapurl = "ldap:/ip:port";// url 
    string ldapaccount = "cn=root"; // 用户名 
    string ldappwd = "password";//密码 
    hashtable env = new hashtable(); 
    env.put(context.initial_context_factory, ldapfactory); 
    // ldap server 
    env.put(context.provider_url, ldapurl); 
    env.put(context.security_authentication, "simple"); 
    env.put(context.security_principal, ldapaccount); 
    env.put(context.security_credentials, ldappwd); 
    env.put("java.naming.referral", "follow"); 
    ldapcontext ctxtds = new initialldapcontext(env, null); 
    return ctxtds; 


2、增加用户zhangsan
复制代码 代码如下:
 
// 添加 
    public void testadd() throws exception { 
        ldapcontext ctx = connetldap(); 
        attributes attrs = new basicattributes(true); 
        attribute objclass = new basicattribute("objectclass"); 
        // 添加objectclass 
        string[] attrobjectclassperson = { "inetorgperson", "organizationalperson", "person", "top" }; 
        arrays.sort(attrobjectclassperson); 
        for (string ocp : attrobjectclassperson) { 
            objclass.add(ocp); 
        } 
        attrs.put(objclass); 
        string uid = "zhangsan"; 
        string userdn = "uid=" + uid + "," + "cn=users,dc=cas,dc=mydc"; 
        // 密码处理 
        // attrs.put("uid", uid); 
        attrs.put("cn", uid); 
        attrs.put("sn", uid); 
        attrs.put("displayname", "张三"); 
        attrs.put("mail", "abc@163.com"); 
        attrs.put("description", ""); 
        attrs.put("userpassword", "passw0rd".getbytes("utf-8")); 
        ctx.createsubcontext(userdn, attrs); 
    } 

3、删除用户zhangsan

复制代码 代码如下:

//删除 
    public void testremove() throws exception { 
        ldapcontext ctx = connetldap(); 
        string uid = "zhangsan"; 
        string userdn = "uid=" + uid + "," + "cn=users,dc=cas,dc=mydc"; 
        ctx.destroysubcontext(userdn); 

    } 

4、修改zhangsan的邮件地址

复制代码 代码如下:
 
//修改 
    public boolean testmodify() throws exception { 
        boolean result = true; 
        ldapcontext ctx = connetldap(); 
        string uid = "zhangsan"; 
        string userdn = "uid=" + uid + "," + "cn=users,dc=cas,dc=mydc"; 
        attributes attrs = new basicattributes(true); 
        attrs.put("mail", "zhangsan@163.com"); 
        ctx.modifyattributes(userdn, dircontext.replace_attribute, attrs); 
        return result; 

    } 

5、查找用户
复制代码 代码如下:

//查询 
    public void testsearch() throws exception { 
        ldapcontext ctx = connetldap(); 
        // 设置过滤条件 
        string uid = "zhangsan"; 
        string filter = "(&(objectclass=top)(objectclass=organizationalperson)(uid=" + uid + "))"; 
        // 限制要查询的字段内容 
        string[] attrpersonarray = { "uid", "userpassword", "displayname", "cn", "sn", "mail", "description" }; 
        searchcontrols searchcontrols = new searchcontrols(); 
        searchcontrols.setsearchscope(searchcontrols.subtree_scope); 
        // 设置将被返回的attribute 
        searchcontrols.setreturningattributes(attrpersonarray); 
        // 三个参数分别为: 
        // 上下文; 
        // 要搜索的属性,如果为空或 null,则返回目标上下文中的所有对象; 
        // 控制搜索的搜索控件,如果为 null,则使用默认的搜索控件 
        namingenumeration<searchresult> answer = ctx.search("cn=users,dc=cas,dc=mydc", filter.tostring(), searchcontrols); 
        // 输出查到的数据 
        while (answer.hasmore()) { 
            searchresult result = answer.next(); 
            namingenumeration<? extends attribute> attrs = result.getattributes().getall(); 
            while (attrs.hasmore()) { 
                attribute attr = attrs.next(); 
                system.out.println(attr.getid() + "=" + attr.get()); 
            } 
            system.out.println("============"); 
        } 
    } 

上一篇:

下一篇: