java - 如何使用UnboundID获取DN和密码

标签 java ldap openldap unboundid-ldap-sdk

我需要一些有关 UnboundID 的帮助。我听说这是一个不错的选择,但我不太习惯。

所以我需要创建一个 LDAP 监听器。在此监听器上,我应该能够捕获绑定(bind)请求(例如来自 ldap 浏览器)。我想知道如何获取 DN 和密码。这是我的 LDAP 监听器代码:

    public ResultCode CreateLdapServer () throws LDAPException {
       CannedResponseRequestHandler requestHandler = new CannedResponseRequestHandler();
    LDAPListenerConfig config =
             new LDAPListenerConfig(4243, requestHandler);
      try
      {
        config.setListenAddress(
             InetAddress.getByName("localhost"));
      }
      catch (final Exception e)
      {
        System.err.println("Unable to create the listen server.");
        return ResultCode.PARAM_ERROR;
      }

    listener = new LDAPListener(config);

    try
    {
      listener.startListening();
      System.out.println("Serveur is listening ...");
    }
    catch (final Exception e)
    {
        System.err.println("Unable to start listening.");
      return ResultCode.LOCAL_ERROR;
    }
    return ResultCode.SUCCESS;
}

public static void main(String[] args) throws LDAPException {
    MyConnection connect = new MyConnection();
    connect.CreateLdapServer();
}

我阅读了很多 UnboundID 文档,但找不到任何我需要的简单示例。

此外,我不太确定 CannedResponseRequestHandler 的实用性。对于我所需要的,足够了吗?

另一个问题:我不确定,但我感觉我的服务器没有监听或者我没有捕获任何内容(当我连接 ldap 浏览器时,什么也没有发生)。有什么想法/建议吗?

谢谢,祝你有美好的一天!

编辑:感谢 xhochy,我能够捕获密码和用户名。正如他所说,我将 LDAPListenerRequestyHandler 子类化以首先覆盖 newInstance,然后覆盖 ProcessBindRequest。这是代码(它绝对不完美,而且仍然是一个开始)。

公共(public)类 MyConnection{

private LDAPListener listener;

public MyConnection(){
}

public ResultCode CreateLdapServer() throws LDAPException {
    MyLDAPListenerRequestHandler requestHandler = new MyLDAPListenerRequestHandler();
    LDAPListenerConfig config =
             new LDAPListenerConfig(4243, requestHandler);
      try
      {
        config.setListenAddress(
             InetAddress.getByName("localhost"));
      }
      catch (final Exception e)
      {
        System.err.println("Unable to create the listen server.");
        return ResultCode.PARAM_ERROR;
      }

    listener = new LDAPListener(config);

    try
    {
      listener.startListening();
      System.out.println("Serveur is listening ...");
    }
    catch (IOException e)
    {
        System.err.println("Unable to start listening.");
      return ResultCode.LOCAL_ERROR;
    }


    return ResultCode.SUCCESS;
}

public static void main(String[] args) throws LDAPException {
    MyConnection connect = new MyConnection();
    connect.CreateLdapServer();
}

}

然后是LDAPListenerRequestHandler的子类:

public class MyLDAPListenerRequestHandler extends LDAPListenerRequestHandler {

@Override
public LDAPListenerRequestHandler newInstance(
        LDAPListenerClientConnection arg0) throws LDAPException {
        System.out.println("New Instance.");
        LDAPConnectionOptions option = new LDAPConnectionOptions();
        LDAPConnection connection = new LDAPConnection(option, "yourIPadress", yourport);
        System.out.println("Connected to : " + connection.getConnectedAddress()+ " " + connection.getConnectedPort());

    return this;
}

@Override
public LDAPMessage processBindRequest(int arg0, BindRequestProtocolOp arg1,
        List<Control> arg2) {
    System.out.println(arg1.getBindDN());
    System.out.println(arg1.getSimplePassword());
    return null;
}

}

再次感谢!

最佳答案

许多 LDAP 服务器实现不会返回密码,并且许多不会返回您可以使用的密码。 (即它可能是一个哈希值)。

我很好奇为什么有理由返回密码。

-吉姆

关于java - 如何使用UnboundID获取DN和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12596708/

相关文章:

java - JToggleButton API 中可能存在错误?

java - 在 Java 中使用 PostgreSQL 域和结构类型

java - 在 Java 中验证 LDAP 用户密码

debian - 在 OpenLDAP 中更改 BaseDN

c - 迭代 ldap 搜索结果集

java - com.fasterxml.jackson.core.JsonGenerationException : Can not write a field name, 期待一个值

java - 如何实现 TCP 出站消息的重试策略

c# - 如何在 C# .net 中从 Active Directory 中提取用户的城市位置

vb.net - 在 VB.NET 中查询 LDAP。我有用户帐户,我想要一个用户所在组的列表

C# 如何向具有多个对象类的 LDAP 添加条目