Java 中的 LDAP 如何针对此 LDAP 进行搜索/身份验证

2024-01-26

我正在使用 LDAP 和 Java 搜索。 这是我的 LDIF 导出,组织简单

version: 1

dn: dc=example,dc=com
objectClass: organization
objectClass: dcObject
objectClass: top
dc: example
o: MyOrganization
description: Test Description

dn: ou=people, dc=example,dc=com
objectClass: organizationalUnit
objectClass: top
ou: people
description: All users in demo company

dn: cn=Johnny Doe,ou=people,dc=example,dc=com
objectClass: organizationalPerson
objectClass: person
objectClass: inetOrgPerson
objectClass: top
cn: Johnny Doe
sn: Johnny
homephone: 123-456-7890
mail: [email protected] /cdn-cgi/l/email-protection
ou: Development
uid: jjohnny
userpassword:: johnny

dn: cn=Samuel Johnson,ou=people,dc=example,dc=com
objectClass: organizationalPerson
objectClass: person
objectClass: inetOrgPerson
objectClass: top
cn: Samuel Johnson
sn: Samuel
homephone: 123-456-7890
mail: [email protected] /cdn-cgi/l/email-protection
ou: Accounts
uid: ssam
userpassword:: sammy

如何运行 Java 代码片段以从 LDAP 服务器获取所有用户?我的 Apache DS Directory Server 上没有身份验证设置。

Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:10389/dc=example,dc=com");
env.put(Context.SECURITY_AUTHENTICATION, "none");

try {
    // Create initial context
    DirContext ctx = new InitialDirContext(env);
    Object obj = new Object();
    // want to print all users from the LDAP server
    System.out.println(obj.toString());
    ctx.close();
}

另一种方法是使用未绑定ID https://www.unboundid.com/products/ldap-sdk/。它的 api 非常易读且简短

创建 LDAP 连接

public static LDAPConnection getConnection() throws LDAPException {
    // host, port, username and password
    return new LDAPConnection("com.example.local", 389, "[email protected] /cdn-cgi/l/email-protection", "admin");
}

获取筛选结果

public static List<SearchResultEntry> getResults(LDAPConnection connection, String baseDN, String filter) throws LDAPSearchException {
    SearchResult searchResult;

    if (connection.isConnected()) {
        searchResult = connection.search(baseDN, SearchScope.ONE, filter);

        return searchResult.getSearchEntries();
    }

    return null;
}

获取所有组织单位和容器

String baseDN = "DC=com,DC=example,DC=local";
String filter = "(&(|(objectClass=organizationalUnit)(objectClass=container)))";

LDAPConnection connection = getConnection();        
List<SearchResultEntry> results = getResults(connection, baseDN, filter);

获取特定的组织单位

String baseDN = "DC=com,DC=example,DC=local";
String dn = "CN=Users,DC=com,DC=example,DC=local";

String filterFormat = "(&(|(objectClass=organizationalUnit)(objectClass=container))(distinguishedName=%s))";
String filter = String.format(filterFormat, dn);

LDAPConnection connection =  getConnection();

List<SearchResultEntry> results = getResults(connection, baseDN, filter);

获取组织部门下的所有用户

String baseDN = "CN=Users,DC=com,DC=example,DC=local";
String filter = "(&(objectClass=user)(!(objectCategory=computer)))";

LDAPConnection connection =  getConnection();       
List<SearchResultEntry> results = getResults(connection, baseDN, filter);

获取组织单位下的特定用户

String baseDN = "CN=Users,DC=com,DC=example,DC=local";
String userDN = "CN=abc,CN=Users,DC=com,DC=example,DC=local";

String filterFormat = "(&(objectClass=user)(distinguishedName=%s))";
String filter = String.format(filterFormat, userDN);

LDAPConnection connection =  getConnection();
List<SearchResultEntry> results = getResults(connection, baseDN, filter);

显示结果

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

Java 中的 LDAP 如何针对此 LDAP 进行搜索/身份验证 的相关文章

  • 具有更高可见性的重写方法是良好的实践吗?

    回答这个问题 如何使用 GUI 使用 PaintComponent 初始化 GUI 然后添加基于鼠标的 GUI https stackoverflow com questions 21336141 how to gui using pain
  • HashMap不写入数据库

    我尝试在我的数据库中写入 但只写入发件人和消息 我不明白为什么会发生这种情况 我认为问题出在我使用 sendMessage 的地方 我认为问题是我没有什么可以做的读 写其他用户的主键 我在数据库中写入消息的活动 public class M
  • 清理码头 - 删除“不必要”的东西

    我习惯用Jetty http jetty codehaus org jetty 作为我的网络容器 我对我做了什么安装步骤得到原始的焦油球并且清理一些目录和文件从中 我在这里想提出的是 您通常从 Jetty 中删除什么以在生产 登台环境中使用
  • 使用 GWT CellTableBuilder 构建树表

    Is it possible to build a tree table like this http www sencha com examples ExamplePlace basictreegrid with the new Cell
  • 无法使用maven编译java项目

    我正在尝试在 java 16 0 1 上使用 maven 构建 IntelliJ 项目 但它无法编译我的项目 尽管 IntelliJ 能够成功完成 在此之前 我使用maven编译了一个java 15项目 但我决定将所有内容更新到16 0 1
  • Spring安全“记住我”cookie在第一个请求中不可用

    我无法在登录请求后检索 Spring 记住我 cookie 但它在对受保护页面的下一个请求中工作正常 谁能告诉我怎样才能立即得到它 我在登录请求中设置了记住我的 cookie 但在 Spring 重定向回原始 受保护的 url 后无法检索它
  • 来自数据库的 jfreechart 散点图

    如何使用java中的jfreechart绘制mysql数据库表中数据的散点图 我使用过 Swing 库 任何链接都会有帮助 我搜索了谷歌但找不到理解的解决方案 如果您有代码 请提供给我 实际上我确实做了条形图并使用 jfreechart 绘
  • 内存一致性 - Java 中的happens-before关系[重复]

    这个问题在这里已经有答案了 在阅读有关内存一致性错误的 Java 文档时 我发现与创建 发生 之前 关系的两个操作相关的点 当语句调用时Thread start 每个具有 与该语句发生之前的关系也有一个 与 new 执行的每个语句之间发生的
  • 如何从 Retrofit2 获取字符串响应?

    我正在做 android 正在寻找一种方法来执行超级基本的 http GET POST 请求 我不断收到错误 java lang IllegalArgumentException Unable to create converter for
  • 如何让spring为JdbcMetadataStore创建相应的schema?

    我想使用此处描述的 jdbc 元数据存储 https docs spring io spring integration docs 5 2 0 BUILD SNAPSHOT reference html jdbc html jdbc met
  • 具有共享依赖项的多模块项目的 Gradle 配置

    使用 gradle 制作第一个项目 所以我研究了 spring gradle hibernate 项目如何组织 gradle 文件 并开始制作自己的项目 但是 找不到错误 为什么我的配置不起作用 子项目无法解决依赖关系 所以项目树 Root
  • Java 8 中函数式接口的使用

    这是来自的后续问题Java 8 中的 双冒号 运算符 https stackoverflow com questions 20001427 double colon operator in java 8其中 Java 允许您使用以下方式引用
  • RSA OAEP、Golang 加密、Java 解密 -BadPaddingException:解密错误

    我正在尝试解密使用 RSA OAEP 在 Golang 中加密的字符串 但出现 BadPaddingException 解密错误 很难弄清楚我错过了什么 这是Golang加密方法 func encryptString rootPEM io
  • Java 数组的最大维数

    出于好奇 在 Java 中数组可以有多少维 爪哇language不限制维数 但是JavaVM规范将维度数限制为 255 例如 以下代码将无法编译 class Main public static void main String args
  • 如何记录来自 Akka (Java) 的所有传入消息

    在 Scala 中 您可以使用 LoggingReceive 包装接收函数 如何通过 Java API 实现相同的目标 def receive LoggingReceive case x do something Scala API 有Lo
  • Dispatcher-servlet 无法映射到 websocket 请求

    我正在开发一个以Spring为主要框架的Java web应用程序 特别使用Spring core Spring mvc Spring security Spring data Spring websocket 像这样在 Spring 上下文
  • 解析输入,除了 System.in.read() 之外不使用任何东西

    我很难找到具体的细节System in read 有效 也许有人可以帮助我 似乎扫描仪会更好 但我不允许使用它 我被分配了一个任务 我应该以 Boolean Operator Boolean 的形式读取控制台用户输入 例如T F 或 T T
  • JVM:是否可以操作帧堆栈?

    假设我需要执行N同一线程中的任务 这些任务有时可能需要来自外部存储的一些值 我事先不知道哪个任务可能需要这样的值以及何时 获取速度要快得多M价值观是一次性的而不是相同的M值在M查询外部存储 注意我不能指望任务本身进行合作 它们只不过是 ja
  • 如何在Java中正确删除数组[重复]

    这个问题在这里已经有答案了 我刚接触 Java 4 天 从我搜索过的教程来看 讲师们花费了大量精力来解释如何分配二维数组 例如 如下所示 Foo fooArray new Foo 2 3 但我还没有找到任何解释如何删除它们的信息 从内存的情
  • JSON 到 hashmap (杰克逊)

    我想将 JSON 转换为 HashMapJackson http jackson codehaus org 这是我的 JSON String json Opleidingen name Bijz trajecten zorg en welz

随机推荐

  • strncpy 的问题以及如何修复它

    我正在学习 C 并阅读 Learn C The Hard Way ISBN 10 0 321 88492 2 我被困在练习 17 如何打破它 上 这是书上的问题 由于 strncpy 性能不佳 该程序存在错误 设计的 去阅读有关 strnc
  • 以 em 单位设置根元素的字体大小意味着什么?

    我没找到官方的定义em单位 但我在规范中发现了这一点 我还发现了很多其他来源 如下所列 这让我想到 设置根元素的字体大小是什么意思 即 to em units 尽管我的很多消息来源都建议使用em 我找不到任何专门指出根元素用法的内容 htm
  • 如何使用mochijson在erlang中编码数据结构?

    我正在使用mochiweb 我不知道如何使用它的json编码器来处理复杂的数据结构 mochijson 和 mochijson2 有什么区别 有什么好的例子吗 我总是收到以下错误 46 gt T6 struct hello asdf fro
  • ListViewItem 工具提示 WPF

    我需要的是 当每个列表视图项的鼠标在工具提示中显示每个列表视图的所有数据时 这是我的视图模型的一部分 using GalaSoft MvvmLight using GalaSoft MvvmLight CommandWpf private
  • Servlet 参数和 doPut

    尝试使用 HttpServlet doPut 从 PUT 请求获取参数 public void doPut HttpServletRequest request HttpServletResponse response String nam
  • 如何从 UIImage 获取文件路径?

    通常情况相反 您使用路径来显示图像 我想知道如果您已经有了图像 是否可以获得路径 如果您已经拥有图像 即已将文件添加到资源中 则可以使用它来获取文件路径 NSString string NSBundle mainBundle pathFor
  • 如何使用 freetype 渲染“Segoe UI Emoji”中的彩色字形?

    我正在尝试使用最新的 freetype 2 8 1 我从源代码编译了 x64 调试版本 没有单线程或多线程 和 OpenGL 从 Windows Segoe UI Emoji 字体渲染彩色字形 所以我用seguiemj ttf来自Windo
  • 使用Aptana Studio导入git项目但权限被拒绝(publickey)

    我尝试将现有项目从 github 存储库导入 aptana studio 但出现错误 提示权限被拒绝 公钥 fatal 远端意外挂断 我确保将 ssh 添加到我在 github 中的帐户 我还运行了 ssh vT 电子邮件受保护 cdn c
  • 将原始类型指针转换为结构指针 - 对齐和填充?

    就在我回答问题 20 分钟的时候 我想到了一个有趣的场景 但我不确定其行为 让我有一个大小为 n 的整数数组 由 intPtr 指向 int intPtr 让我也有一个这样的结构 typedef struct int val1 int va
  • Flutter Firebase 删除子集合不起作用

    在我的 Firebase 结构中 我有一个集合和其中的一些子集合 我想当我删除集合时 也删除子集合 我正在尝试执行 Firebase 文档中的操作 要删除 Cloud Firestore 中的整个集合或子集合 请检索集合或子集合中的所有文档
  • 使用 python 和 conda 扩展 openCV 的 GUI

    我在用着开放式CV 3 3 with python3 6 3我安装在conda环境和一段时间 当显示图像时 使用基本的 cv2 函数imshow window name my image 例如 一个小的 GUI 将与图像一起显示 我还能够随
  • 是否可以将默认的类dunder方法转换为类方法?

    为了给你一些背景信息 昨天我遇到了这个帖子 https stackoverflow com q 62031547 5472354 我发现这个问题非常有趣 所以我尝试找到一种解决方案 使语法尽可能接近所要求的内容 这是我想出的 class D
  • GCC:为什么常量变量不放在.rodata中

    我一直相信 GCC 会设立一个static const变量为 rodata段 或 textELF 或此类文件的优化段 但情况似乎并非如此 我目前正在使用gcc GCC 4 7 0 20120505 prerelease 在装有 GNU Li
  • 如何将 select2 与 Meteor 一起使用?

    有人可以向我解释 select2 如何与 Meteor 一起使用吗 我在用zimme select2 bootstrap 3 css https atmospherejs com zimme select2 bootstrap3 css我不
  • 使用Spring将文本文件直接注入到String中

    所以我有这个 Value classpath choice test html private Resource sampleHtml private String sampleHtmlData Before public void rea
  • 撤销个人权限后更新会话

    我试图为用户提供一个通过复选框 Facebook SDK for Android 设置 撤销发布权限的选项 下面提供了代码 一切工作正常 除了在撤销负责检查发布权限的代码后惨遭失败 据我所知 Session 无法知道用户登录后是否撤销了任何
  • div内容加载后获取div高度

    我正在尝试设置一个的高度div等于另一个 我将它们称为左 div 和右 div 正确的div内容并不总是相同 并且使用 jQuery 加载 它是一个过滤器 因此每次单击过滤器时 内容都会发生变化 父级 div 高度也会发生变化 这是我的代码
  • 在 R 中,有没有办法将 RMarkdown v2 html 文件作为电子邮件正文发送

    我开发了一份报告 该报告大量使用了 RMarkdown v2 中的功能 特别是向 html 文档添加 css 类和 id 的功能 以便使用样式表更好地控制输出 我希望通过电子邮件正文发送这些报告 我一直在尝试使用 send mail mai
  • 如何显示搜索视图最近的搜索历史记录

    我尝试使用以下方式但无法显示最近的搜索历史记录 在 ActionBar 上的 SearchView 中创建 历史记录 https stackoverflow com questions 19166537 create history to
  • Java 中的 LDAP 如何针对此 LDAP 进行搜索/身份验证

    我正在使用 LDAP 和 Java 搜索 这是我的 LDIF 导出 组织简单 version 1 dn dc example dc com objectClass organization objectClass dcObject obje