![](/img/trans.png)
[英]how to get DN in LDAP with user ID using UnboundID LDAP SDK
[英]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.