Получить список пользователей Active Directory с аутентифицированной личностью через Waffle (Java)?

Я хочу разрешить пользователю проходить аутентификацию и получать полный список пользователей Active Directory без ввода пароля. Я могу легко пройти аутентификацию через Waffle и могу запросить информацию, относящуюся к аутентифицированному пользователю, например, список групп, к которым он принадлежит. Однако Waffle, похоже, не может делать более общие запросы, такие как полный список пользователей (или даже список пользователей, принадлежащих к определенной группе).

У меня есть еще один игрушечный пример, в котором я использую JNDI для запроса списка пользователей, который работает нормально, но для установления соединения требуется имя пользователя и пароль.

Предполагая, что анонимные запросы отключены на моем сервере AD, есть ли способ использовать аутентифицированный сеанс, который я установил через Waffle, для запроса списка пользователей?


person bkaiser    schedule 01.09.2015    source источник


Ответы (1)


Разобрался, если кому интересно. Честно говоря, удивлен, что не получил ответа и не нашел четкого решения где-то в Интернете. Оказывается, 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();
  }
person bkaiser    schedule 02.09.2015