繁体   English   中英

如何使用UnboundID获取DN和密码

[英]How to get DN and password with UnboundID

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

因此,我需要制作一个LDAP侦听器。 在此侦听器上,我应该能够捕获绑定请求(例如,从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。 这是代码(这绝对不是完美的,它仍然是一个开始)。

公共类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服务器实现将不会返回密码,并且许多将不会返回您可以使用的密码。 (即可能是哈希)。

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

-Jim

您应该子类化LDAPListenerRequestHandler并实现processBindRequest 所有你正在寻找的信息包含在BindRequestProtocolOp (的第二个参数processBindRequest )。 为所有其他抽象方法添加一个空的实现。

如果request是您的BindRequestProtocolOp实例,则可以通过以下方式获取信息:

String username = request.getBindDN();
ByteString password = request.getSimplePassword();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM