2017-12-12 26 views
0

Active Directoryグループから一部のユーザーをフェッチし、別のサイトで更新しようとしています。 NamingEnumerationからユーザーIDをフェッチし、REST API呼び出しによってそれを更新する別のメソッドに渡す必要がある部分を除いて、タスクはほぼ完了しています。以下は、私はADグループからユーザーを取得していたコードの一部です:Java NamingEnumeration - NamingEnumerationから単一の要素を取得する

DirContext myContext = new InitialDirContext(envVars); 

    SearchControls searchCtrls = new SearchControls(); 
    searchCtrls.setSearchScope(SearchControls.SUBTREE_SCOPE); 
    String[] attributes = { "cn", "member"}; 
    searchCtrls.setReturningAttributes(attributes); 

    String filter = "(&(objectClass=group)(cn=GROUP_NAME))"; 
    NamingEnumeration values = myContext.search("DC=XXXX,DC=XXXX",filter,searchCtrls); 

    while (values.hasMoreElements()) 
    { 
     SearchResult result = (SearchResult) values.next(); 
     Attributes attribs = result.getAttributes(); 
     if (null != attribs) 
     { 
      for (NamingEnumeration ae = attribs.getAll(); ae.hasMoreElements();) 
      { 
       Attribute atr = (Attribute) ae.next(); 
       String attributeID = atr.getID(); 
       for (
        Enumeration vals = atr.getAll(); 
        vals.hasMoreElements(); 
        System.out.println(attributeID+": "+vals.nextElement())      
       ); 
      } 
     } 
    } 

私はこれを実行すると、出力は以下のようなものです:

メンバー:CN = USERNAME、OU = XXX OU = XXX、OU = XXX、DC = XXX、DC = XXX、DC = XXX、OU = XXX、DC = XXX、DC = XXX、DC = XXX
メンバー:CN = USERNAME、 XXX

基本的には、このCNすなわちUSERNAMEだけを別の方法に渡す必要があります。

私はそれらを文字列配列に取得して処理しようとしましたが、役に立たなかったので、私は時間が足りません。 アイデアをいただければ幸いです。ありがとう。

+0

ただ1つの要素があるとすぐに「中断」します。 – EJP

答えて

0

まあ、私はこの問題を回避しました。 以下のアプローチが私のために働いた。

if (null != attribs) 
     { 
      for (NamingEnumeration ae = attribs.getAll(); ae.hasMoreElements();) 
      { 

       Attribute atr = (Attribute) ae.next(); 
       for (
        Enumeration vals = atr.getAll(); 
        vals.hasMoreElements(); 
       ) { 
         list.add(vals.nextElement().toString()); 
       } 
      } 
     } 

出力をリストの中に入れ、望ましくない部分をクリップしてCNだけを得る。 これが将来誰かを助けるのであればうれしいです。

関連する問題