ApacheDS - 自定义SearchHandler(Java)

时间:2016-03-02 12:08:51

标签: java oracle ldap apacheds

以下是我想要实现的目标:

一方面,我有一个Oracle数据库。另一方面,一个“简单”的Java应用程序(让我们称之为“App”)。

在中间,ApacheDS中嵌入了Java。我们的想法是通过嵌入式LDAP服务器访问该数据库。

目前,我可以将“App”连接到嵌入式LDAP服务器,向其发送参数并在Oracle数据库中执行一些sql。

但问题是我无法将结果恢复到“App”。 显然,我应该使用自己的“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);                
        }
});

1 个答案:

答案 0 :(得分:0)

有点晚了,但是你走的是正确的道路。

我使用ApacheDS作为LDAP代理,或多或少相同(但使用BindRequestHandler)。我正在使用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。这就是您能够向oracle发送命令但不发送响应的原因。