以下是我想要实现的目标:
一方面,我有一个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);
}
});
答案 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发送命令但不发送响应的原因。