本記述例では、次の環境を想定しています。ご使用の環境にあわせて変更してください。
リポジトリ作成時の公開ディレクトリを“ou=interstage,o=fujitsu,dc=com”としています。
ユーザ情報の場所を“ou=User,ou=interstage,o=fujitsu,dc=com”としています。
ユーザ情報のRDNを“cn”としています。
userには、ロールを追加する利用者名をjava.lang.Stringで指定してください。
roleには、追加するロールをjava.lang.Stringで指定してください。
ctxは、共通の前処理で得られた結果を使用します。

| 【前処理】 : String [] retAttributes = new String[1]; retAttributes[0] = "ssoRoleName"; SearchControls sc = new SearchControls(); sc.setSearchScope(SearchControls.OBJECT_SCOPE); sc.setReturningAttributes(retAttributes); sc.setCountLimit(1); sc.setTimeLimit(5*1000); // 5 seconds String filter = "(cn=" + user + ")";
String dn = "cn=" + user + ",ou=User,ou=interstage,o=fujitsu,dc=com";
NamingEnumeration ne = ctx.search(dn, filter, sc);
Attribute roleAttr = null;
while(ne.hasMore()) {
          SearchResult sr = (SearchResult)ne.next();
          Attributes attrs = sr.getAttributes();
          if(attrs != null) {
                    roleAttr = attrs.get("ssoRoleName");
                    if(roleAttr != null) {
                              break;
                    }
          }
}
if(roleAttr == null) {
          roleAttr = new BasicAttribute("ssoRoleName", role);
} else {
          // すでに存在していた場合、なにもしない
          for(int i = 0; i < roleAttr.size(); i++) {
                    if(role.compareToIgnoreCase((String)roleAttr.get(i)) == 0) {
                              ctx.close();
                              return;
                    }
          }
          roleAttr.add(role);
}
ModificationItem[] mods = new ModificationItem[1];
mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, roleAttr);
ctx.modifyAttributes(dn, mods);
              :
          【後処理】 |