2

UnboundID に関するヘルプが必要です。いい選択だとは聞いていましたが、あまり慣れていません。

そのため、LDAP リスナーを作成する必要があります。このリスナーでは、(たとえば LDAP ブラウザーから) バインド要求をキャッチできるはずです。DN とパスワードを取得する方法を知りたいです。LDAP リスナーのコードは次のとおりです。

    public ResultCode CreateLdapServer () throws LDAPException {
       CannedResponseRequestHandler requestHandler = new CannedResponseRequestHandler();
    LDAPListenerConfig config =
             new LDAPListenerConfig(4243, requestHandler);
      try
      {
        config.setListenAddress(
             InetAddress.getByName("localhost"));
      }
      catch (final Exception e)
      {
        System.err.println("Unable to create the listen server.");
        return ResultCode.PARAM_ERROR;
      }

    listener = new LDAPListener(config);

    try
    {
      listener.startListening();
      System.out.println("Serveur is listening ...");
    }
    catch (final Exception e)
    {
        System.err.println("Unable to start listening.");
      return ResultCode.LOCAL_ERROR;
    }
    return ResultCode.SUCCESS;
}

public static void main(String[] args) throws LDAPException {
    MyConnection connect = new MyConnection();
    connect.CreateLdapServer();
}

多くの UnboundID ドキュメントを読みましたが、必要なものの簡単な例が見つかりません。

また、CannedResponseRequestHandler の有用性についてはよくわかりません。必要なものは十分ですか?

別の質問: よくわかりませんが、サーバーがリッスンしていない、または何もキャッチしていないような気がします (LDAP ブラウザーに接続しても何も起こりませんでした)。任意のアイデア/提案?

ありがとう、良い一日を!

編集: xhochy のおかげで、パスワードとユーザー名をキャッチできました。彼が言ったように、LDAPListenerRequestyHandler をサブクラス化してオーバーライドし、最初に newInstance、次に ProcessBindRequest としました。これがコードです (完全ではなく、まだ始まったばかりです)。

パブリック クラス MyConnection {

private LDAPListener listener;

public MyConnection(){
}

public ResultCode CreateLdapServer() throws LDAPException {
    MyLDAPListenerRequestHandler requestHandler = new MyLDAPListenerRequestHandler();
    LDAPListenerConfig config =
             new LDAPListenerConfig(4243, requestHandler);
      try
      {
        config.setListenAddress(
             InetAddress.getByName("localhost"));
      }
      catch (final Exception e)
      {
        System.err.println("Unable to create the listen server.");
        return ResultCode.PARAM_ERROR;
      }

    listener = new LDAPListener(config);

    try
    {
      listener.startListening();
      System.out.println("Serveur is listening ...");
    }
    catch (IOException e)
    {
        System.err.println("Unable to start listening.");
      return ResultCode.LOCAL_ERROR;
    }


    return ResultCode.SUCCESS;
}

public static void main(String[] args) throws LDAPException {
    MyConnection connect = new MyConnection();
    connect.CreateLdapServer();
}

}

次に LDAPListenerRequestHandler のサブクラス:

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<Control> arg2) {
    System.out.println(arg1.getBindDN());
    System.out.println(arg1.getSimplePassword());
    return null;
}

}

再度、感謝します !

4

2 に答える 2

3

多くのLDAPサーバーの実装はパスワードを返しませんし、多くは使用できるパスワードを返しません。(つまり、ハッシュかもしれません)。

パスワードを返す理由があるのはなぜか、非常に興味があります。

-ジム

于 2012-09-27T11:53:41.693 に答える
2

サブクラス化LDAPListenerRequestHandlerして実装する必要がありますprocessBindRequest。探しているすべての情報はBindRequestProtocolOp(の2番目の引数processBindRequest)に含まれています。他のすべての抽象メソッドに空の実装を追加します。

requestがインスタンスの場合BindRequestProtocolOp、次の方法で情報を取得します。

String username = request.getBindDN();
ByteString password = request.getSimplePassword();
于 2012-09-26T09:08:13.500 に答える