如何使用UnboundID获取DN和密码

我需要一些关于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 arg2) { System.out.println(arg1.getBindDN()); System.out.println(arg1.getSimplePassword()); return null; } 

}

再次感谢 !

您应该LDAPListenerRequestHandler并实现processBindRequest 。 您要查找的所有信息都包含在BindRequestProtocolOpBindRequestProtocolOp第二个参数)中。 为所有其他抽象方法添加一个空实现。

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

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

许多LDAP服务器实现不会返回密码,许多不会返回您可以使用的密码。 (也就是哈希)。

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

-Jim