我遇到LDAP操作问题。当用户从GUI /浏览器中选择时,我想动态地将成员添加到LDAP组。我粘贴下面的代码,当我在Test类中运行它时(使用com.sun.jndi.ldap.LdapCtxFactory
),它可以很好地工作。但是,当我将其打包到我的构建中时,在websphere app server 7.0上部署(使用com.ibm.websphere.naming.WsnInitialContextFactory
),并根据用户的选择调用此方法,然后我收到以下错误。我想知道我在做什么是错的。是不是提供了ldap连接工厂的实现?我也尝试使用sun的ldap在WAS上部署,否则它将在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;
}
}
我解决了。在这里发布解决方案,希望这有助于某人。
我在散列表中缺少的其他属性,一旦我添加它们,它就像一个魅力。
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");
答案 0 :(得分:0)
嗯,自问这个问题以来已经一年多了;所以,我不知道回答会增加任何价值。但是,在这里。有关该工厂类实际如何工作以及工作原理的详细信息,请参阅WAS Javadocs。您可能需要为WAS调整jndiprovider.properties文件。