Java API 操作 OpenLDAP

2023-11-19

OpenLDAP Windows 安装

@RunWith(SpringRunner.class)
@SpringBootTest
public class OpenLDAPJavaAPITest {

    private static Hashtable ev = new Hashtable();
    private static DirContext dirContext;

    static {
        ev.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        ev.put(Context.PROVIDER_URL, "ldap://127.0.0.1:389/dc=shpun,dc=com");
        ev.put(Context.SECURITY_AUTHENTICATION, "simple");
        ev.put(Context.SECURITY_PRINCIPAL, "cn=Manager,dc=shpun,dc=com");
        ev.put(Context.SECURITY_CREDENTIALS, "secret");
        try {
            dirContext = new InitialDirContext(ev);
        } catch (NamingException e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * Java LDAP 查询 person cn属性
     */
    @Test
    public void getAllPersonNamesJavaLDAp() {
        List<String> list = new ArrayList<String>();
        NamingEnumeration results = null;
        try {
            SearchControls controls = new SearchControls();
            controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
            results = dirContext.search("", "(objectclass=inetOrgPerson)", controls);

            while (results.hasMore()) {
                SearchResult searchResult = (SearchResult) results.next();
                Attributes attributes = searchResult.getAttributes();
                Attribute attr = attributes.get("cn");
                String cn = attr.get().toString();
                list.add(cn);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (results != null) {
                try {
                    results.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            if (dirContext != null) {
                try {
                    dirContext.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * uid=zhangsan1001uid,ou=people,dc=shpun,dc=com 不行
     * uid=zhangsan1001uid,ou=people 可以
     */
    @Test
    public void getByDn() throws Exception{
        Object obj = dirContext.lookup("uid=zhangsan1001uid,ou=people");
    }

    /**
     * dirContext.search 的 name参数置空可以
     */
    @Test
    public void searchByAttribute() {
        NamingEnumeration results = null;
        try {
            SearchControls controls = new SearchControls();
            controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
            String returnedAtts[] = { "cn","sn","description","title","uid","displayName" };
            controls.setReturningAttributes(returnedAtts);

            results = dirContext.search("ou=people", "uid=zhangsan1001uid", controls);
            while (results.hasMoreElements()) {
                SearchResult searchResult = (SearchResult)results.next();
                System.out.println(">>>" + searchResult.getName());
                Attributes attrs = searchResult.getAttributes();
                if (attrs != null) {
                    for (NamingEnumeration<? extends Attribute> names = attrs.getAll(); names.hasMore();) {
                        Attribute attr = names.next();
                        System.out.println("AttributeID: " + attr.getID());
                        for (NamingEnumeration<?> e = attr.getAll(); e.hasMore();) {
                            System.out.println("Attributes:" + e.next());
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (results != null) {
                try {
                    results.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            if (dirContext != null) {
                try {
                    dirContext.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

	/**
     * 添加
     */
    @Test
    public void insert(){
        Attributes attrs = new BasicAttributes();
        attrs.put("uid", "zhangsan1006uid");
        attrs.put("sn", "zhangsan1006sn");
        attrs.put("cn", "zhangsan1006cn");
        attrs.put("description", "zhangsan1006description");
        attrs.put("title", "zhangsan1006title");
        attrs.put("displayName", "zhangsan1006displayName");

        Attribute objClass = new BasicAttribute("objectClass");
        objClass.add("top");
        objClass.add("person");
        objClass.add("organizationalPerson");
        objClass.add("inetOrgPerson");
        attrs.put(objClass);

        try {
            dirContext.createSubcontext("uid=zhangsan1006uid,ou=people", attrs);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (dirContext != null) {
                try {
                    dirContext.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
   	 * 更新单个属性
     * 需要登录验证,在ev的Hashtable中添加OpenLDAP的账号密码
     */
    @Test
    public void updateAttribute() {
        ModificationItem[] mods = new ModificationItem[1];
        Attribute attr = new BasicAttribute("cn", "zhangsan1006cnUpdate");
        mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, attr);

        try {
            dirContext.modifyAttributes("uid=zhangsan1006uid,ou=people", mods);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (dirContext != null) {
                try {
                    dirContext.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
	
	/**
     * 删除
     */
    @Test
    public void delete(){
        try {
            dirContext.destroySubcontext("uid=zhangsan1006uid,ou=people");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (dirContext != null) {
                try {
                    dirContext.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

参考:
使用JAVA自带方法增删改查LDAP

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java API 操作 OpenLDAP 的相关文章

  • OpenLDAP 部署及实践(一)

    OpenLDAP部署前期准备 角色主机名操作系统IP地址备注CA serverCA serverCentOS7192 168 3 254作为签发ca使用 xff0c 可复用dap1ldap 1ldap1CentOS7192 168 3 11
  • CentOS8.4 OpenLDAP服务配置

    目录 OpenLDAP简介 基本操作 配置文件 服务端配置 配置下载证书 生成数据库并设置权限 调用模块 定义访问和认证信息 定义目录结构 配置用户认证结构 测试 NFS服务配置 客户端配置 测试 挂载用户目录 相关知识 注意事项 环境 服
  • Linux下安装openldap

    Linux下安装openldap 1 安装Berkeley DB 4 7 25 伯克利大学嵌入式数据库方案 openldap用它作为存储方案 root instance 0pk09gjj ldap wget http download or
  • Java API 操作 OpenLDAP

    OpenLDAP Windows 安装 RunWith SpringRunner class SpringBootTest public class OpenLDAPJavaAPITest private static Hashtable
  • 如何使用LDAP对用户进行密码验证?

    我正在编写一个客户端应用程序 使用OpenLDAP库 用户通过 LDAP 服务器进行身份验证 以下是无法比较用户的 userPassword 的硬编码示例程序 include
  • OpenDJ、OpenAM 和 OpenIAM 是免费软件

    已经使用 OpenDJ 和 OpenAM 的人有什么体验 旧版本似乎可以免费使用 但新版本似乎不能免费使用 它们与现有的商业产品相比如何 它们看起来比使用 OpenLDAP 和 CAS 更好 但看起来并不免费 您可以在下面找到答案 具体取决
  • Ruby net-ldap 添加用户

    我正在尝试使用 ldap 创建一个新用户 方法如下 require net ldap ldap Net LDAP new ldap host ldap ldap auth uid myuser ou users dc my dc domai
  • OpenLDAP 动态组不按成员搜索

    我很困惑 我在 OpenLDAP 中有一个动态组 dn cn DynamicGroup ou Group dc MyDomain cn DynamicGroup objectClass groupOfURLs memberURL ldap
  • 如何使用 Msys2 和 MinGW 在 Windows 上构建 OpenLDAP 库?

    我正在尝试在 Windows 上构建 OpenLDAP 我这样做非常困难 我开始按照概述的指示进行操作here http www openldap org faq data cache 302 html 但很快意识到它已经过时了 然后我发现
  • 测试 LDAP 与 Active Directory 服务器的连接

    我正在编写一个访问 LDAP 服务器 当前为 OpenLDAP 的 Linux 应用程序 我还想使用 Active Directory 服务器测试该应用程序 因为它可能会在生产中使用 Microsoft 是否有任何免费演示版或试用版可以让我
  • Java Tomcat LDAP 身份验证

    由于我使用 Tomcat6 作为 servlet 容器运行 Java 因此我发现使用Tomcat JNDIRealm 功能 http tomcat apache org tomcat 6 0 doc realm howto html JND
  • 无法在 PHP 中加载 LDAP 函数

    当尝试使用ldap connect http php net ldap connect 我收到此错误 致命错误 调用未定义的函数 ldap connect 我重新编译了 php 启用了 LDAP apache 模块 并且也编辑了 php i
  • 在 Centos 6.3 中使用 php-ldap

    我正在尝试使用 php 构建 LDAP 界面 但遇到了这个奇怪的问题 我已经在我的基本 php 安装上使用 yum 安装了 php ldap 包 但每当我调用 ldap connect 时 它都会说该函数未定义 看到 phpinfo 我可以
  • 用于在 OpenLDAP 中创建 Active Directory 用户和组的 LDIF?

    我有一个使用 Active Directory 来验证用户身份的 Web 应用程序 并且我正在尝试用 OpenLDAP 替换 AD 文档说我需要以管理员身份登录域控制器 打开用户管理窗口 单击适当的组织单位并将用户 ID 添加到适当的组 这
  • LDAPSEARCH 转换为表格格式

    有没有办法执行 LDAP 搜索并将结果保存为表格格式 例如 csv 干杯 乔治 您可以使用优秀的铣床工具 mlr https miller readthedocs io en latest 最后一点 echo output sed s g
  • 如何手动安装旧的 cygwin 软件包?

    我正在进行的一个项目需要旧版本的 SLAPD LDAP 服务器 并且必须在 Windows 上运行 因此我使用 cygwin 软件包 我在这里找到了我需要2 2 x的slapd版本的二进制包 http www mirrorservice o
  • 如何使用 Grafana 和 Wamp 的 LDAP 身份验证进行单点登录?

    我正在尝试使用 LDAP 为 grafana 添加单点登录 我遇到过LDAP 的 Grafana 文档 http docs grafana org installation ldap 但我不明白 我可以使用 LDAP 获得单点登录功能吗 如
  • 活动目录与 OpenLDAP

    LDAP 协议的这两种实现之间的主要区别是什么 异构环境哪个更好 关于这个主题有什么好的网站吗 以下是我立即知道的一些差异 OpenLDAP 可以称为通用 LDAP 服务器 类似于许多其他供应商的 LDAP 服务器 Fedora DS 38
  • 如何查找用户所属的所有组? (LDAP)

    我正在尝试获取某个用户所属的所有组 我有以下内容结构在LDAP中 o myOrganization ou unit1 cn admin cn guess and ou users cn ann cn bob cn carla myOrgan
  • 带有 LDAP 身份验证的 SVN 不起作用

    我首先从我的设置开始 为此我们有 2 台服务器 Server1 将用于所有源代码 文件等 在 Server2 上 我们拥有所有用户信息和登录信息 两台服务器都运行在 Centos 6 4 上 现在我们要在 server1 上设置一个 SVN

随机推荐