【问题标题】:Enable an Active Directory user with LDAP/Java使用 LDAP/Java 启用 Active Directory 用户
【发布时间】:2012-03-22 10:55:49
【问题描述】:

我正在尝试使用 LDAP 和 Java (1.4) 在 Active Directory 中启用用户。 但是我不断收到以下错误:

java.lang.NullPointerException 在 com.sun.jndi.ldap.LdapCtx.c_modifyAttributes(LdapCtx.java:1432) 在 com.sun.jndi.toolkit.ctx.ComponentDirContext.p_modifyAttributes(ComponentDir Context.java:255) 在 com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.modifyAttributes(部分 CompositeDirContext.java:172) 在 com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.modifyAttributes(部分 CompositeDirContext.java:161) 在 javax.naming.directory.InitialDirContext.modifyAttributes(InitialDirContext. java:146) 在 be.ideal.LDAP.newuser.main(newuser.java:61) 中的异常 线程“主”

我已经确认我的用户有密码,但我似乎无法将他的状态更改为活动

我的代码:

 public static void main(String[] args) {
        String userName = "cn=Albert Einstein,ou=Accounts,DC=PORTAL,DC=COMPANY,DC=BE";
        String groupName = "cn=Administrators,cn=Roles,DC=PORTAL,DC=COMPANY,DC=BE";
        boolean isDisabled = false;

        try {

            System.out.println("Creating initial directory context...");
            LdapContext ctx = new InitialLdapContext(X_Ldap.getEnvironment(),
                    null);

            Attributes attrs = new BasicAttributes(true);

            attrs.put("objectClass", "user");
            attrs.put("cn", "Albert Einstein");

String newQuotedPassword = "\"Pass123\"";
            byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE");
            attrs.put(new BasicAttribute("unicodePwd", newUnicodePassword));

            attrs.put(new BasicAttribute("msDS-UserAccountDisabled", "FALSE"));

            System.out.println("Creating context...");
            Context result = ctx.createSubcontext(userName, attrs);
            System.out.println("Created account for: " + userName);

            System.out.println("Creating context...");
            Context result = ctx.createSubcontext(userName, attrs);
            System.out.println("Created account for: " + userName);

            try {
                ModificationItem member[] = new ModificationItem[1];
                member[0] = new ModificationItem(DirContext.ADD_ATTRIBUTE,
                        new BasicAttribute("member", userName));

                ctx.modifyAttributes(groupName, member);
                System.out.println("Added user to group: " + groupName);

            } catch (NamingException e) {
                System.err.println("Problem adding user to group: " + e);
            }

            ctx.close();

            System.out.println("Successfully created User: " + userName);

        } catch (NamingException e) {
            System.err.println("Problem creating object: " + e);
        }

        catch (IOException e) {
            System.err.println("Problem creating object: " + e);
        }
    }

PS:我正在为我的活动目录使用 AD LDS

【问题讨论】:

    标签: java active-directory ldap adlds


    【解决方案1】:

    找到了: 需要使用 DirContext.ADD_ATTRIBUTE 而不是 DirContext.REPLACE_ATTRIBUTE

    【讨论】:

    • 欲了解更多信息,请参阅Replacing the value of a multi-valued attribute的进一步讨论。
    • AD LDS/Active Directory 中的布尔值有多值?
    • 您还需要定义 'enableUser[]' 的第二个成员,或将其维度减少到 1。但我不明白您为什么不只是在创建之前设置所有您想要的属性子上下文,而不是创建它然后修改它。
    • 我可以设置密码并启用具有创建属性的帐户,但将其添加到组中似乎只有在我创建用户后才能工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多