java测试类调用LDAP服务器客户端信息实行增删改查

如下是我自写的java测试类调用客户端配置好的用户信息:

package com;

import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.Control;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;

public class UserAuthenticate {
    private String URL = "ldap://localhost:10389";
    private String BASEDN = "cn=zhangsan,ou=users,ou=system";
    private String FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
    private LdapContext ctx = null;
    private Hashtable env = null;
    private Control[] connCtls = null;

    @SuppressWarnings({ "unchecked", "rawtypes", "unused" })
    public void LDAP_connect() {
        env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, FACTORY);
        env.put(Context.PROVIDER_URL, URL);
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, "cn=lisi;ou=users;ou=system");
        env.put(Context.SECURITY_CREDENTIALS, "123456");
        // env.put("", "secret");
        try {
            ctx = new InitialLdapContext(env, connCtls);
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }

    public void getUserDN() {
        String dn = "zhangsan";
        SearchControls controls = new SearchControls();
        //限制要查询的字段内容
        controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
        //设置过滤条件
        String filter = "(&(objectClass=top)(objectClass=person)(cn=" + dn
                + "))";
        //设置被返回的attribute
        controls.setReturningAttributes(new String[] { "uid", "userPassword",
                "displayName", "cn", "sn", "mail", "description" });
        try {
            //控制搜索的搜索条件,如果为null则使用默认的搜索控件,要搜索的属性如果为null则返回目标上下文中的所有对象
            NamingEnumeration answer = ctx
                    .search("ou=system", filter, controls);
            while (answer.hasMore()) {
                SearchResult result = (SearchResult) answer.next();
                NamingEnumeration en = result.getAttributes().getAll();
                if (en == null) {
                    System.out.println("Have no NamingEnumeration");
                }
                if (!en.hasMoreElements()) {
                    System.out.println("Have no element");
                }
                //输出查询到的结果
                while (en.hasMore()) {
                    Attribute attr = (Attribute) en.next();
                    System.out.println(attr.getID() + "=" + attr.get());
                }
            }

        } catch (NamingException e) {
            e.printStackTrace();
        }

    }

    public void testAdd() throws Exception {
        Attributes attrs = new BasicAttributes(true);
        Attribute objclass = new BasicAttribute("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 + "," + "ou=system";
        attrs.put("cn", uid);
        attrs.put("sn", uid);
        attrs.put("displayName", "张三");
        attrs.put("description", "not null");
        attrs.put("mail", "[email protected]");
        attrs.put("userPassword", "11111".getBytes("UTF-8"));
        ctx.createSubcontext(userDN, attrs);
    }
    public void testDelete(){
        String uid = "zhangsan";
        String userDN = "uid="+ uid +","+"ou=system";
        try {
            ctx.destroySubcontext(userDN);
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }
    public boolean testEdit(){
        boolean result = true;
        String uid = "zhangsan";
        String userDN = "uid="+ uid +","+"ou=system";
        Attributes attr = new BasicAttributes(true);
        attr.put("mail","[email protected]");
        try {
            ctx.modifyAttributes(userDN, DirContext.REPLACE_ATTRIBUTE, attr);
        } catch (NamingException e) {
            e.printStackTrace();
        }
        return result;
    }
    public static void main(String[] args) {
        UserAuthenticate test = new UserAuthenticate();
        // test.getUserDN("zhangsan;ou=users;ou=system");
        try {
            test.LDAP_connect();
             //test.testAdd();
            test.getUserDN();
            //test.testEdit();
            //test.testDelete();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-14 00:10:52

java测试类调用LDAP服务器客户端信息实行增删改查的相关文章

MVC实例及用三层架构实现对学生信息的增删改查

一.MVC设计模式实例 M层 Login.java package org.entity; public class Login { private int id; private String uname; private String upwd; public Login() { } public Login( String uname, String upwd) { this.uname = uname; this.upwd = upwd; } public Login(int id, S

Java数据库连接——JDBC基础知识(操作数据库:增删改查)

一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库.比如建立数据库连接.执行SQL语句进行数据的存取操作. JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数据库 创

【Hibernate】Hibernate的在Eclipse+Mysql的配置、安装,纯Java,利用Annotation与HQL完成数据库的增删改查

这篇文章有很多槽点,在Hibernate4.x上面用着Hibernate3.x的写法去写.而且程序中放到Eclipse中会有一大堆警告,但是这好歹也在一定程度上完成了Hibernate的入门.毕竟现在很多介绍Hibernate的书籍都是用Hibernate3.x的写法去写.上次那篇<[Hibernate]最简单的Hibernate工程--账号注册系统>(点击打开链接)杂糅Struts的技术其实是不对的.因为Hibernate完成的是,从Java到数据库,从数据库到Java的任务.之后Java与

安卓版php服务器的mysql数据库增删改查简单案例

index.php文件: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html

Redis 笔记与总结7 PHP + Redis 信息管理系统(用户信息的增删改查)

1. PHP 连接 Redis 访问 redis 官方网站的 client 栏目:http://www.redis.io/clients#php,可以获取 redis 的 php 扩展. 其中 phpredis 扩展比较稳定,功能也比较全,属于一个第三方扩展,但是已经被 PHP 官方授权,它的方法名和客户端下的方法名基本一致.github 地址:https://github.com/phpredis/phpredis,方法在这里也能查得到. ① 下载 phpredis 的源代码包,解压.配置.编

weiyi通讯录(二)获取联系人信息包括头像 增删改查功能,

看了下第一期的访问量,100都没有可能很多人不需要吧,之前跟过一个大神学做项目,他都不吧核心代码告诉我,感觉没有一点分享精神,所以我就自己做.没跟他一起做 这里把上次的代码分享一下 我这里分享的跟我博客里面可能不一样因为我已经做完第一个模块了,代码就没有分开了 第一期的代码地址:http://download.csdn.net/detail/u010982856/8232855 分享的是类似的代码 基本跟我的是一样.如果需要的联系人我把 或者加入我的交流群吧 -----------欢迎加入交流群

ASP.NET Core 打造一个简单的图书馆管理系统(七)外借/阅览图书信息的增删改查

前言: 本系列文章主要为我之前所学知识的一次微小的实践,以我学校图书馆管理系统为雏形所作. 本系列文章主要参考资料: 微软文档:https://docs.microsoft.com/zh-cn/aspnet/core/getting-started/?view=aspnetcore-2.1&tabs=windows <Pro ASP.NET MVC 5>.<锋利的 jQuery> 此系列皆使用 VS2017+C# 作为开发环境.如果有什么问题或者意见欢迎在留言区进行留言.

SQLite帮助类SQlitehelper 实现对SQLite数据的增删改查

public class SQLiteHelper { public const string sConn = "Data Source=" + @"path"; /// <summary> /// 查询,返回object ,得到查询结果的首行首列的值,若没有首行首列返回NUll /// </summary> /// <param name="sql">查询语句</param> /// <pa

后台代码对iBatis配置文件中具体的sql语句的调用实现(被封装的增删改查)

using IBatisNet.Common.Exceptions; using IBatisNet.DataAccess; using IBatisNet.DataAccess.DaoSessionHandlers; using IBatisNet.DataAccess.Interfaces; using IBatisNet.DataMapper; using IBatisNet.DataMapper.Commands; using IBatisNet.DataMapper.Configura