Oracle LDAP使用Java将用户移动到其他OU

svujldwt  于 2023-01-25  发布在  Oracle
关注(0)|答案(1)|浏览(286)

我正在寻找一种使用Java来更改Oracle LDAP中用户的OU的方法。到目前为止,我只找到了***DirContext.rename***方法,但这会导致LDAP条目损坏。下面是我尝试的代码。

Hashtable<String, String> environment = new Hashtable<String, String>();
    environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    environment.put(Context.SECURITY_AUTHENTICATION, "simple");
    environment.put(Context.REFERRAL, "follow");
    environment.put(Context.PROVIDER_URL, "ldap://localhost:10389");
    environment.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system");
    environment.put(Context.SECURITY_CREDENTIALS, "admin");

    DirContext ctx = null;
    try {
        ctx = new InitialDirContext(environment);
        String oldCn = "uid=wso21,ou=wso2,ou=Users,dc=WSO2,dc=ORG";
        String newCn = "uid=wso21,ou=vodafone,ou=Users,dc=WSO2,dc=ORG";
        ctx.rename(oldCn, newCn);
    } catch (NamingException e) {
        e.printStackTrace();
    } finally {
        try {
            ctx.close();
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }

执行此操作后,移动的条目在那里,但不存在任何属性。
蒂亚!

yjghlzjz

yjghlzjz1#

请修改try块:

try {
    ctx = new InitialDirContext(environment);
    String oldDn = "uid=wso21,ou=wso2,ou=Users,dc=WSO2,dc=ORG";
    String newDn = "uid=wso21,ou=vodafone,ou=Users,dc=WSO2,dc=ORG";
    String newCn="newCN";
    String newSn="newSN";
    Attributes attrs = ctx.getAttributes(oldDn);
    ctx.rename(oldDn,newDn);
    attrs.remove("cn");
    attrs.remove("sn");
    //if needed remove more attributes
    attrs.put("cn",newCn);
    attrs.put("sn",newSn);
    //if needed add more attributes
    ctx.modifyAttributes(newDn, DirContext.ADD_ATTRIBUTE, attrs);
}

相关问题