У меня проблема с операцией LDAP.Я хочу динамически добавлять участника в группу LDAP при выборе пользователем из GUI / браузера.Я вставляю приведенный ниже код, который отлично работает, когда я запускаю его в классе Test (используя com.sun.jndi.ldap.LdapCtxFactory
).Но когда я упаковываю его в свою сборку, развертываю на сервере приложений websphere 7.0 (используя com.ibm.websphere.naming.WsnInitialContextFactory
) и вызываю этот метод в соответствии с выбором пользователя, я получаю сообщение об ошибке ниже.Интересно, что не так я делаю.Разве WAS не обеспечивает реализацию фабрики соединений ldap?Я также попытался развернуть WAS с помощью ldap от sun, который в противном случае работает в классе Test, но я получаю то же исключение, что и ниже.Я был бы признателен, если кто-нибудь может дать подсказку.
Проблема добавления члена: javax.naming.OperationNotSupportedException: [LDAP: код ошибки 53 - 00000561: SvcErr: DSID-031A120C, проблема 5003 (WILL_NOT_PERFORM), данные 0
My Code:
public class LDAPManager
{
String GROUPS_OU = "cn=users,dc=mit,dc=hq,dc=com";
public Boolean addMember(String user, String group)
{
Hashtable env = new Hashtable();
String adminName = "CN=Administrator,CN=Users,DC=mit,DC=hq,DC=com";
String adminPassword = "asdfasdf21Q";
String ldapURL = "ldap://mybox451Dev.mit.hq.com:389";
String userName = "CN="+user+",CN=Users,DC=mit,DC=hq,DC=com";
String groupName = "CN="+group+",CN=Users,DC=mit,DC=hq,DC=com";
//env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");
//set security credentials, note using simple cleartext authentication
env.put(Context.SECURITY_AUTHENTICATION,"simple");
env.put(Context.SECURITY_PRINCIPAL,adminName);
env.put(Context.SECURITY_CREDENTIALS,adminPassword);
//connect to my domain controller
env.put(Context.PROVIDER_URL, "ldap://mybox451Dev.mit.hq.com:389");
try {
// Create the initial directory context
InitialDirContext ctx = new InitialDirContext(env);
//Create a LDAP add attribute for the member attribute
ModificationItem mods[] = new ModificationItem[1];
mods[0]= new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute("member", userName));
//update the group
ctx.modifyAttributes(groupName,mods);
ctx.close();
//System.out.println("Added " + userName + " to " + groupName);
}
catch (NamingException e) {
System.err.println("Problem adding member: " + e);
}
return true;
}
}
Я понял это.Разместите здесь решение, надеюсь, это кому-нибудь поможет.
- Используйте стандартный JNDI-контекст солнца, а не веб-сферы.
Дополнительные свойства, которые я пропустил в хеш-таблице, после добавления они работали как шарм.
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
//env.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");
//set security credentials, note using simple cleartext authentication
env.put(Context.SECURITY_AUTHENTICATION,"simple");
env.put(Context.SECURITY_PRINCIPAL,adminName);
env.put(Context.SECURITY_CREDENTIALS,adminPassword);
env.put(Context.URL_PKG_PREFIXES, "com.sun.jndi.url");
env.put(Context.REFERRAL, "ignore");