【问题标题】:Java API to query LDAP用于查询 LDAP 的 Java API
【发布时间】:2013-03-25 15:51:00
【问题描述】:

我希望查询 LDAP 服务器以从中检索所有用户条目。我遇到了一些图书馆

  1. OpenLDAP
  2. LDAP SDK
  3. Mozilla Directory
  4. Apache Directory API

我的要求是查询像 AD 服务器这样的 LDAP 实现中的所有用户、易于编程和图书馆周围的良好社区。我在这里找不到明显的赢家。谁能告诉我广泛使用且功能强大的 API?

【问题讨论】:

  • 令人惊讶的是您没有找到 JNDI。它内置在 JDK 中。
  • JNDI 不完全支持 LDAP 的所有功能。见comparison with UnboundId
  • 我知道这一点,但这并不意味着它不存在。确实如此,除非您深入了解这些极端情况,否则它非常适合用作 LDAP API。不理想,但可以使用。
  • @EJP 应该添加 JNDI 作为这个问题的答案。我认为这足以实现查询所有用户的 OP 问题。找到这个问题后,感谢 EJP,我最终使用了 JNDI。
  • @KCBaltz 没有什么能阻止您自己将其添加为答案。

标签: java active-directory ldap


【解决方案1】:

与 Java 一起使用的最佳 API 是 UnboundID LDAP SDK。它清晰、完整、完全实现了 LDAP 标准规范、易于使用和理解、文档齐全、线程安全,而且标准版是免费的。甚至没有其他 API 能比得上。

另见

【讨论】:

  • 这在 2019 年仍然适用吗?谢谢
【解决方案2】:

不得不深入 Java LDAP SDK 市场,因为一些带有 SDK 错误的旧 LDAP JAVA 程序需要修复,而且我有一段时间失去了对支持的 Java LDAP API 的最新概述。一些研究让我看到了几个古老的概述和这个相当古老的线程。我想,我只是在这里分享我最新的 SDK 发现。

截至今天,Java LDAP SDK 市场似乎提供了以下功能:

  • jLDAP(Novell Java LDAP SDK), OpenLDAP Java SDK(Novell LDAP SDK 的兄弟分支), Netscape/Sun Java LDAP SDK, OpenDS LDAP SDK:所有 4 个存储库现在看起来实际上已经死掉/无人维护了好几年(其中一些已经有十年了)。看不到支持公司或活跃的社区。​​p>

  • Oracle LDAP SDK:基本上是以前的 Netscape/Sun Java SDK,有付费的 Oracle 支持,但也没有维护。甚至在开源世界中都不存在。

  • OpenDJ Java LDAP SDK:支持公司已远离开源市场,不再维护此 SDK。最新的 SDK 版本 3.0.0 已经有好几年了,从未离开 beta 阶段,最新的官方发布版本更早:2.6.11。据说 SDK 的商业版本也几乎被废弃了。

  • ldaptive.org:一些大学项目。以前的 JNDI 包装器,但现在声称拥有自己的 LDAP SDK 协议实现。在大学外围似乎没有社区或用户。没有死,但目前还不清楚,这里可以期待什么质量状态。如果你问我,这个项目会做得更好,花时间支持 Apache LDAP SDK 项目,因为实际上没有人需要另一个外观-妈妈-我-也-制造-一个 LDAP-客户端-SDK在一个充斥着其他大多数平庸的 JAVA LDAP SDK 的饱和市场中。

  • Apache LDAP SDK:与其他 Apache 项目相比,LDAP SDK 的速度确实很慢。不知何故,Apache LDAP 似乎错过了一个真正的公司支持的东西,它只是有才华的爱好爱好者推动事情向前发展。您可能不想使用 SDK V1.0 开始任何新项目,因为它们声明 V2.0 破坏了接口代码。但是您可能还不想使用 SDK V2.0,因为它仍然是 beta 版,没有人知道它会保持 beta 多久(V1 保持 beta 6 年......)。 SDK 远未消亡,只是进展非常缓慢。

  • Java JNDI:自古以来就内置于 Java 中,自发布以来从未改变。 Still 对于编码来说真的很难看,文档是一团糟,除了基本搜索之外的每项任务都是实现的噩梦,基本上每个项目都无法正确实现它,有几件事被设计破坏了。似乎有一些关于未来 JDK 的 JNDI-LDAP 继任者的概念想法,但到目前为止还没有遵循。

  • Unbound SDK:成熟,维护最好的SDK,功能丰富,虽然背后的公司还是风投,烧钱。到目前为止,看起来他们不会很快站起来。因此,SDK 支持的长期方面尚不清楚。商业项目中 SDK 的前党员曾经是它的 GPL 许可证。开源版本现在似乎也有 LGPL 许可证(可能适合也可能不适合项目)。

  • Spring:似乎是一个稳定的 LDAP SDK,而且拥有庞大的 Spring 社区。但功能较少且没有最前沿的东西。虽然个人还没有使用此 SDK 的经验。

所以现在,Java LDAP 似乎有四个合理的选择:JNDI、Unbound、Spring、Apache,各有优缺点。一旦你开始使用 JNDI,你可能会非常讨厌它。 一个好的建议可能是,不要急于进行旧 SDK 的迁移项目,而是投入额外的精力来实现包装器代码,以便以后能够在需要时轻松切换 SDK。

【讨论】:

    【解决方案3】:

    检查Apache Directory Client API 它是开源的并且有一个活跃的社区(完全披露:我从事 Apache Directory 项目),最重要的是 Apache Directory Client 默认支持所有基本 LDAP 控件,包括密码策略和 syncrepl,这与某些商业版本不同仅在付费版本中支持这些。

    如果需要,您可以轻松添加新的/自定义控件和扩展操作,并且借助注释驱动的 test framework 启动内存目录服务器非常容易

    查看example,了解如何利用 API 和测试框架进行单元测试。

    还有,如果您在单元测试中需要 Kerberos v5 服务器,它只是一个 annotation away

    【讨论】:

    • 但它似乎不支持自 2011 年以来一直很出色的目录引用追踪 (DIRAPI-61)。
    【解决方案4】:

    我们使用 UnboundID LDAP SDK。很好,例子很多,支持也不错。

    对 JLDAP 和 Mozilla 目录 API 的支持和维护不佳是我们退出使用它们的原因。

    https://wiki.mozilla.org/LDAP_Java_SDK 不存在。 JLDP sdk 已多年未更新。 (我记得是 2009 年)。

    【讨论】:

    • Netscape/Mozilla Java API 确实存在,我目前正在生产中使用它。它在那个网站上。
    【解决方案5】:

    还有来自 Imperva 的开源库 https://github.com/imperva/domain-directory-controller

    在那里你可以找到一个很好的查询示例。

    【讨论】:

      【解决方案6】:

      我在生产中使用https://www.ldaptive.org/,到目前为止我很高兴它就像“ORM”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多