gpt4 book ai didi

java - InMemoryDirectoryServer,处理请求(绑定(bind)、修改等)

转载 作者:行者123 更新时间:2023-12-01 14:52:04 25 4
gpt4 key购买 nike

我正在使用 UnboundID SDK 中的 InMemoryDirectoryServer。如何处理来自 ldap 客户端的 ldap 请求?

这是我找到的代码(在 How to get DN and password with UnboundID ):

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;
}

这是捕获绑定(bind)请求并处理它的正确方法

public LDAPMessage processBindRequest(int arg0, BindRequestProtocolOp arg1,
List<Control> arg2) {

功能?处理完成后,我是否需要手动将bind发送到InMemoryDirectoryServer实例?

再次嗨,

基于: http://sourceforge.net/p/ldap-sdk/discussion/1001257/thread/796c129d

在我看来,可以修改 InMemoryRequestHandler 源并更改它回复 ldap 请求的方式(搜索、修改...)。

对于别名取消引用,我修改了

for (final SearchResultEntry e : entryList)

函数中的循环:

public synchronized LDAPMessage processSearchRequest(final int messageID, final SearchRequestProtocolOp request, final List controls) {

使用此代码:

for (final SearchResultEntry e : entryList)
{

// flag which is set if for loop finds an alias entry.
boolean aliasEntryFound = false;
// aliasedObjectName reference to real entry.
String aliasedObjectName = null;

// Check that dereferencing is turned on.
if (aliasDeref)
{
// check if entry is an alias entry.
for (String objectClass : e.getAttributeValues("objectClass"))
{
if (objectClass.equalsIgnoreCase("alias"))
{
// Put on flag.
aliasEntryFound = true;
// Get real entry path.
aliasedObjectName = e.getAttributeValue("aliasedObjectName");

}
}

}

// If entry e is actually alias entry, then ...
if (aliasEntryFound && aliasedObjectName != null)
{
// Build new SearchRequest query with aliasedObjectName as real DN.
final SearchRequestProtocolOp newRequest = new SearchRequestProtocolOp(
aliasedObjectName, request.getScope(), request.getDerefPolicy(),
request.getSizeLimit(), request.getTimeLimit(),
false, request.getFilter(), request.getAttributes());
// Call recursively processSearchRequest() with new request value.
processSearchRequest(messageID, newRequest, controls);

}
else
{
try {
connection.sendSearchResultEntry(messageID, e, e.getControls());
} catch (final LDAPException le) {
Debug.debugException(le);
return new LDAPMessage(messageID, new SearchResultDoneProtocolOp(le.getResultCode().intValue(), le.getMatchedDN(),
le.getDiagnosticMessage(), StaticUtils.toList(le.getReferralURLs())), le.getResponseControls());
}
}
}
...
}

在 InMemoryRequestHandler 类开头的某个位置,我添加了:

private boolean aliasDeref = true;

我只是将其用作标志来控制是否需要别名取消引用。

我的代码只是一个如何对搜索请求进行别名取消引用的示例。使用自定义请求处理程序,只能提醒 LDAP 请求,而不提醒 LDAP 回复或结果。

请告诉我是否有更好的方法。谢谢

最佳答案

适用于 Java 的 UnboundID LDAP SDK 提供了一个 LDAPListener 框架,允许您创建自己的代码来接受来自客户端的 LDAP 请求并提供响应。当LDAPListener收到请求时,它使用LDAPListenerRequestHandler来处理请求并生成结果。

内存目录服务器使用 InMemoryRequestHandler 来执行此处理,但您可以创建自己的请求处理程序实现来执行您想要的任何操作(例如,CannedResponseRequestHandler 绑定(bind)地返回对任何请求的固定响应),并且您可以在委托(delegate)给另一个请求处理程序之前执行一些处理的请求处理程序(例如,AccessLogRequestHandler 和 LDAPDebuggerRequestHandler 实现拦截请求并将有关它们的信息写入日志文件,然后再将它们转发到另一个请求处理程序,然后拦截并记录有关响应的信息在将其返回给客户端之前;相反,ProxyRequestHandler 通过 LDAP 对另一个目录服务器进行处理。

如果您想提供自定义处理,那么您应该创建自己的 LDAPListenerRequestHandler 子类(正如您所假设的,processBindRequest 方法可用于执行绑定(bind)操作的处理)。如果该请求处理程序完成了操作的所有处理,那么您可以自己创建并返回响应。如果您只需要拦截请求并捕获有关它的信息,然后将其转发给其他真正执行处理的东西,那么您应该委托(delegate)给另一个请求处理程序。 LDAP SDK 中已有这两个示例,因此您可以将它们用作模型来创建您需要的内容。

关于java - InMemoryDirectoryServer,处理请求(绑定(bind)、修改等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14751343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com