2

パスワードを入力しなくても、ユーザーが Active Directory ユーザーの完全なリストを認証して取得できるようにしたいと考えています。Waffle を使用して簡単に認証でき、認証されたユーザーに固有の情報 (ユーザーが属するグループのリストなど) を照会できます。ただし、Waffle には、ユーザーの完全なリスト (または特定のグループに属するユーザーのリスト) のような、より一般的なクエリを作成する機能がないようです。

JNDI を使用してユーザー リストを照会する別のおもちゃの例を構成しました。これは正常に動作しますが、接続を確立するにはユーザー名とパスワードが必要です。

AD サーバーで匿名クエリが無効になっていると仮定すると、Waffle を介して確立した認証済みセッションを使用して、ユーザーのリストをクエリする方法はありますか?

4

1 に答える 1

3

誰かが興味を持っている場合に備えて、それを考え出しました。正直なところ、オンラインのどこかで答えが得られなかったり、明確な解決策が見つからなかったりしたことに驚いています。単純なユーザー リスト クエリには Waffle は不要であることがわかりました。コード サンプルを変更して、このトリックを実行する次のメソッドを生成しました。

static void queryCom4j(){ 
  IADs rootDSE = COM4J.getObject(IADs.class, "LDAP://RootDSE", null);
  String namingContext = (String)rootDSE.get("defaultNamingContext");

  _Connection conn = ClassFactory.createConnection();
  conn.provider("ADsDSOObject");
  conn.open("Active Directory Provider","","",-1);

  _Command cmd = ClassFactory.createCommand();
  cmd.activeConnection(conn);

  String fields = "distinguishedName,userPrincipalName,telephoneNumber,mail";
  String query = "(&(objectclass=user)(objectcategory=person))";

  cmd.commandText("<LDAP://" + namingContext + ">;" + query + ";" + fields + ";subTree");
  _Recordset rs = cmd.execute(null, Variant.getMissing(), -1);

  System.out.println("Found " + rs.recordCount() + " users");
  while (!rs.eof()){
      for (int i = 0; i < fields.split(",").length; i++){
          Object value = rs.fields().item(i).value();
          System.out.println((value == null) ? "N/A" : value.toString());
      }
      rs.moveNext();
  }
于 2015-09-02T17:00:53.190 に答える