2016-03-02 59 views
1

這是我想達到的目標:ApacheDS中 - 自定義SearchHandler(JAVA)

一方面,我有一個Oracle數據庫。另一方面,一個「簡單」的Java應用程序(我們稱之爲「應用程序」)。

而在中間,嵌入ApacheDSJava。這個想法是通過嵌入式LDAP服務器訪問該數據庫。

目前,我可以將「App」連接到嵌入式LDAP服務器,向其發送參數並在Oracle數據庫中執行一些sql。

但問題是,我無法將結果返回到「應用程序」。 顯然,我應該使用我自己的「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

那麼,沒有人有想法?或者鏈接到tuto解釋如何創建自定義SearchHandler。 – AdriLoulou

回答

0

有一點晚,但你是在正確的道路上。

我正在做或多或少的相同(但與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。這就是爲什麼你能夠向oracle發送命令,但不發送響應的原因。