InMemoryDirectoryServer, обрабатывая запросы (связывают, изменяют, и т.д.),

Я использую InMemoryDirectoryServer от UnboundID SDK. Как я обрабатываю запросы ldap от ldap клиента?

Вот код, который я нашел (в Как получить DN и пароль с 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 arg2) {
    System.out.println(arg1.getBindDN());
    System.out.println(arg1.getSimplePassword());
    return null;
}

Это, надлежащий способ захватить связывает reqest и обрабатывает его под

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

функция? После обработки я должен вручную послать, связывают со случаем InMemoryDirectoryServer?

Привет снова,

based on: http://sourceforge.net/p/ldap-sdk/discussion/1001257/thread/796c129d

это смотрит на меня, что возможно изменить источник InMemoryRequestHandler и измениться, как это отвечает запросам ldap (поиск, измените...).

Для псевдонима dereferencing, я изменил

для (заключительный SearchResultEntry e: entryList)

петля в функции:

общественность синхронизировала LDAPMessage processSearchRequest (заключительный интервал messageID, заключительный запрос SearchRequestProtocolOp, заключительные средства управления Списком) {

с этим кодом:

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;

который я просто использую в качестве флага, чтобы управлять, если я хочу псевдоним dereferencing или нет.

Мой код - просто пример, как сделать псевдоним dereferencing на поисковом запросе. С таможенным укладчиком запроса возможно только привести в готовность запросы ldap, не ldap ответы или результаты.

Сообщите мне, есть ли лучший способ сделать это. спасибо

0
nl ja de

1 ответы

UnboundID LDAP SDK для Явы служит основой LDAPListener, которая позволяет вам создавать свой собственный код, который принимает запросы LDAP от клиентов и может предоставить ответы назад им. Когда LDAPListener получает запрос, он использует LDAPListenerRequestHandler, чтобы обработать запрос и произвести результат.

Сервер каталогов в памяти использует InMemoryRequestHandler, чтобы выполнить эту обработку, но можно создать собственное внедрение укладчика запроса, которое делает то, что вы хотите (например, CannedResponseRequestHandler bindly возвращает фиксированный ответ на любой запрос), и у вас может быть укладчик запроса, который делает некоторую обработку прежде, чем делегировать другому укладчику запроса (например, запросы точки пересечения внедрений AccessLogRequestHandler и LDAPDebuggerRequestHandler, и напишите информацию о них к файлу журнала прежде, чем отправить им на другом укладчике запроса, и затем перехватите и зарегистрируйте информацию об ответе прежде, чем возвратить его назад клиенту; с другой стороны ProxyRequestHandler делает обработку к другому серверу каталогов по LDAP).

Если вы хотите обеспечить таможенную обработку, то необходимо создать собственный подкласс LDAPListenerRequestHandler (и как вы предположили, processBindRequest метод может использоваться, чтобы выполнить обработку для связывать операции). Если тот укладчик запроса делает всю обработку для операции, то можно создать и возвратить ответ сами. Если просто необходимо перехватить информацию о запросе и захвате об этом прежде, чем отправить его на чем-то еще, что действительно выполнит обработку, то необходимо делегировать другому укладчику запроса. Уже есть примеры обоих из тех в LDAP SDK, таким образом, можно использовать их в качестве модели, чтобы создать то, в чем вы нуждаетесь.

1
добавлено
com.unboundid.ldap.listener. InMemoryDirectoryServer должен быть всем примером, в котором вы нуждаетесь для этого. Полный исходный код для LDAP SDK предоставлен в src.zip файле, содержавшемся в загрузке.
добавлено автор Neil Wilson, источник
Вы определенно shouldn' t изменяют код для InMemoryDirectoryServer. Это - специализированный класс, который предназначается, чтобы служить только в качестве frontend для InMemoryRequestHandler. Если вы хотите использовать различного укладчика запроса, затем создать ваш собственный LDAPListener и иметь его, ссылаются на желаемого укладчика запроса. Это - очень простой процесс, который требует только нескольких линий кода.
добавлено автор Neil Wilson, источник
спасибо. есть ли пример, как использовать класс InMemoryRequestHandler, чтобы обработать ldap сообщения от клиентов? Я загрузил unboundid ldapsdk 2.3.1 se пакета, он где-нибудь там?
добавлено автор Igor Delac, источник
You' право ре. Похоже, что в очень начинающемся в конструкторе класса InMemoryDirectoryServer.java эта линия: inMemoryHandler = новый InMemoryRequestHandler (конфигурация); , Который означает, что нет никакого способа вынудить случай InMemoryDirectoryServer использовать таможенного укладчика, если я не изменяю исходный код библиотеки. Право?
добавлено автор Igor Delac, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async