ApacheDS — пользовательский обработчик поиска (Java)

Вот чего я хотел бы добиться:

С одной стороны, у меня есть база данных Oracle. С другой стороны, «простое» Java-приложение (назовем его «Приложение»).

А посередине встроенный ApacheDS в Java. Идея состоит в том, чтобы получить доступ к этой базе данных через встроенный сервер LDAP.

На данный момент я могу подключить «Приложение» к встроенному серверу LDAP, отправить ему параметры и выполнить некоторый sql в базе данных Oracle.

Но проблема в том, что я не могу вернуть результат в «Приложение». Видимо, я должен использовать свой собственный "SearchHandler", но я не могу понять, как это сделать.

Надеюсь, мои объяснения достаточно ясны. Если нет, я могу попытаться дать более подробную информацию.

server.setSearchHandler(new LdapRequestHandler<InternalSearchRequest>() {
        @Override
        public void handle(LdapSession ls, InternalSearchRequest t) throws Exception {
            //Getting data from Oracle database
            System.out.println(dataFromDatabase);                
        }
});

person AdriL.    schedule 02.03.2016    source источник
comment
Ну ни у кого нет идей? Или ссылку на учебник, объясняющий, как создать собственный SearchHandler.   -  person AdriL.    schedule 08.03.2016


Ответы (1)


Немного поздно, но вы на правильном пути.

Я делаю примерно то же самое (но с BindRequestHandler), используя ApacheDS в качестве прокси-сервера LDAP. Я делаю это, используя версию 2.0.0-M23.

Я расширил это так:

public class LoggerBindRequestHandler extends BindRequestHandler {
   private static final Logger LOGGER = LoggerFactory.getLogger(LoggerBindRequestHandler.class);

   @Override
   public void handle(LdapSession session, BindRequest request) throws Exception {
      LOGGER.debug(session.toString());
      LOGGER.debug(request.toString());

      super.handle(session, request);
   }

   @Override
   public void handleSaslAuth(LdapSession session, BindRequest request) throws Exception {
      LOGGER.debug(session.toString());
      LOGGER.debug(request.toString());

      super.handleSaslAuth(session, request);
   }

   @Override
   public void handleSimpleAuth(LdapSession session, BindRequest request) throws Exception {
      LOGGER.debug(session.toString());
      LOGGER.debug(request.toString());

      super.handleSimpleAuth(session, request);
   }
}

Затем я установил сервер ldap

ldapServer.setBindHandlers(new LoggerBindRequestHandler(), new LoggerBindResponseHandler());

И это все.

Насколько я заметил, вам не хватает ResponseHandler. Вот почему вы можете отправлять команды оракулу, но не отправлять ответ.

person Bob Rivers    schedule 05.02.2017