0

LDAP 検索アプリケーションを作成しています。正常に動作しますが、検索結果にはフィールド名も表示されます

元:

**sn:** YYYY
**department:** xxxx
....etc

フィールド名を印刷しないようにするにはどうすればよいですか?

ありがとう

public LdapContext getLdapContext() {

LdapContext ctx = null;
try {
        Hashtable<String, String> env = new Hashtable<String, String>();
        env.put(Context.INITIAL_CONTEXT_FACTORY,
                "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.SECURITY_AUTHENTICATION, "XXX");
        env.put(Context.SECURITY_PRINCIPAL, "XXXX");
        env.put(Context.SECURITY_CREDENTIALS, "XXXX");
        env.put(Context.PROVIDER_URL, "XXXXX");
        ctx = new InitialLdapContext(env, null);
        System.out.println("Connection Successful.");
    } catch (NamingException nex) {
        System.out.println("LDAP Connection: FAILED");
        nex.printStackTrace();
    }
    return ctx;
}


SearchControls constraints = new SearchControls();

constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
String[] attrIDs = { lastName, firstName, location,
                     telephoneNumber, jobTitle, division };
constraints.setReturningAttributes(attrIDs);

// First input parameter is search base, it can be
// "CN=Users,DC=Domain,DC=com"
// Second Attribute can be uid=username
NamingEnumeration<SearchResult> answer = ctx.search("OU= Users,DC=Domain,DC=com",
                "sn=" + lastname, constraints);

私が何をしているのかを示すいくつかのコード、、、pls help

4

3 に答える 3

0

私はあなたがこれに沿って何かをしていると仮定することしかできません:

static void printAttrs(Attributes attrs) {
   if (attrs == null) {
     System.out.println("No attributes");
   } else {
    /* Print each attribute */
    try {
     for (NamingEnumeration<?> ae = attrs.getAll(); ae.hasMore();) {
      Attribute attr = (Attribute) ae.next();
      System.out.println("attribute: " + attr.getID());

      // print each value
      for (NamingEnumeration<?> e = attr.getAll(); e.hasMore(); System.out.println("value: " + e.next()));
     }

    } catch (NamingException e) {
    e.printStackTrace();
    }
  }
}


その一部を取得したい場合は、次のようなものでコンテンツを解析できます。

**注:このコードはどこかから取得されたもので、リンクを失いました...

/*
 * Prepares and returns CN that can be used for AD query
 * e.g. Converts "CN=**Dev - Test Group" to "**Dev - Test Group"
 * Converts CN=**Dev - Test Group,OU=Distribution Lists,DC=DOMAIN,DC=com to "**Dev - Test Group"
 */
public static String getCN(String cnName) {
    if (cnName != null && cnName.toUpperCase().startsWith("CN=")) {
        cnName = cnName.substring(3);
    }
    int position = cnName.indexOf(',');
    if (position == -1) {
        return cnName;
    } else {
        return cnName.substring(0, position);
    }
}
于 2012-08-17T13:51:46.127 に答える
0

LDAP にはフィールドがなく、attribute descriptions属性値を持つフィールドがあります。属性の説明は、OID のエイリアスです。たとえば、cndepartment.

属性を表示するコードで、属性の値だけを返すメソッドを呼び出します。

また、JNDI の代わりにUnboundID LDAP SDKの使用を検討してください。JNDI は新しいコードには使用しないでください。

こちらもご覧ください

于 2012-08-17T13:30:46.163 に答える