通过Waffle(Java)获取具有经过身份验证的身份的Active Directory用户列表?

时间:2015-09-01 13:47:10

标签: java active-directory ldap waffle

我希望允许用户验证并检索完整的Active Directory用户列表,而无需输入密码。我可以通过Waffle轻松验证,并可以查询特定于已验证用户的信息,例如它们所属的组列表。但是,Waffle似乎无法进行更全面的查询,例如完整的用户列表(甚至是属于某个组的用户列表)。

我配置了另一个玩具示例,我使用JNDI查询用户列表,工作正常,但需要用户名和密码才能建立连接。

假设我的AD服务器上禁用了匿名查询,有没有办法让我使用我通过Waffle建立的经过身份验证的会话来查询用户列表?

1 个答案:

答案 0 :(得分:2)

想出来,万一有人感兴趣。老实说我没有得到答案或在网上找到一个明确的解决方案。事实证明,Waffle对于简单的用户列表查询是不必要的 - 我修改了the code sample here以生成以下方法来实现这一诀窍:

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();
  }