如何在AD用户账户中设置userAccountControl属性

3
我正在使用Java创建AD用户帐户。我已经成功创建了用户帐户,并且该帐户在“AD用户和计算机”GUI中也已创建,但我无法访问创建的AD用户帐户。
我遇到的问题是无法将"userAccountControl"属性设置为"512",该属性表示"NORMAL_ACCOUNT"或"66048",表示"NORMAL_ACCOUNT, ACCOUNT_NEVER_EXPIRES"。
每当我设置上述值时,都会显示以下异常:
javax.naming.NameAlreadyBoundException: [LDAP: error code 68 - 00000524: UpdErr: DSID-031A122A, problem 6005 (ENTRY_EXISTS), data 0
]; remaining name 'cn=User Four,ou=DAT,DC=dat,DC=com'
at com.sun.jndi.ldap.LdapCtx.mapErrorCode(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(Unknown Source)
at com.sun.jndi.ldap.LdapCtx.c_createSubcontext(Unknown Source)
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_createSubcontext(Unknown Source)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(Unknown Source)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.createSubcontext(Unknown Source)
at javax.naming.directory.InitialDirContext.createSubcontext(Unknown Source)
at NewUser.addUser(NewUser.java:94)
at MainClass.main(MainClass.java:7)

当我直接从AD GUI创建用户账户时,该账户会成功创建并具有“userAccountControl”属性的“512”或“66048”。我可以访问这些账户。

有谁能告诉我如何解决这个问题。

这是我的addUser()方法。

public boolean addUser() throws NamingException {

        Attributes container = new BasicAttributes();
        Attribute objClasses = new BasicAttribute("objectClass");
        objClasses.add("top");
        objClasses.add("person");
        objClasses.add("organizationalPerson");
        objClasses.add("user");

        String cnValue = new StringBuffer(firstName).append(" ").append(lastName).toString();
        Attribute cn = new BasicAttribute("cn", cnValue);
        Attribute sAMAccountName = new BasicAttribute("sAMAccountName", userName);
        Attribute principalName = new BasicAttribute("userPrincipalName", userName
                + "@" + DOMAIN_NAME);
        Attribute givenName = new BasicAttribute("givenName", firstName);
        Attribute sn = new BasicAttribute("sn", lastName);
        Attribute uid = new BasicAttribute("uid", userName);
        Attribute userPassword = new BasicAttribute("userpassword", password);
        Attribute userAccountControl = new BasicAttribute("userAccountControl", "512");

        container.put(objClasses);
        container.put(sAMAccountName);
        container.put(principalName);
        container.put(cn);
        container.put(sn);
        container.put(givenName);
        container.put(uid);
        container.put(userPassword);
        container.put(userAccountControl);

        try {
            context.createSubcontext(getUserDN(cnValue, organisationUnit), container);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

你如何设置这些值?请展示一些相关的代码。 - Ocaso Protal
抱歉给@OcasoProtal带来不便。我已经添加了我的addMethod。 - additionster
1个回答

3

实际上,由于我的代码在AD服务器中创建的AD帐户没有密码,所以无法将"userAccountControl"属性设置为51266048。我使用了命令行AD帐户创建方法dsadd user "cn=用户名,ou=组织单位,ou=组织单位,dc=域,dc=域" -upn "用户名@dat.com" -email "用户名@dat.com" -fn 名字 -ln 姓氏 -display "显示用户名" -mustchpwd no -pwd 密码 -disabled no


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接