使用Java代码,我试图在AD LDAP中创建用户,但我无法将userAccountControl
状态设置为512,尽管我试图通过我的代码将状态传递为512,但是用不同的userAccountControl
状态创建了用户如544。
创建用户后,我无法使用其ID(DN)和密码登录LDAP。
我正在使用代码:
attributes.add(new LDAPAttribute("userAccountControl", "512"));
attributes.add(new LDAPAttribute("userPassword", "Password@1"));
还有什么其他方法可以将
userAccountControl
设置为512? 最佳答案
userAccountControl
的值544为512 + 32,即means NORMAL_ACCOUNT
+ PASSWD_NOTREQD
,可能是因为创建时没有密码。如果没有密码,则不能将其设置为512。
创建帐户后,必须在第二步中设置密码。 AD有点奇怪,因为userPassword
属性甚至在您有时仅以您想象的方式运行时,甚至存在。您可以根据需要阅读有关here的信息。但是,最好设置unicodePwd
代替,尽管总是有些奇怪的格式,但总是以相同的方式工作。
有一个执行此here的Java示例:
public void updateUserPassword(String username, String password)
{
try
{
System.out.println("updating password...\n");
String quotedPassword = "\"" + password + "\"";
char unicodePwd[] = quotedPassword.toCharArray();
byte pwdArray[] = new byte[unicodePwd.length * 2];
for (int i = 0; i < unicodePwd.length; i++)
{
pwdArray[i * 2 + 1] = (byte) (unicodePwd[i] >>> 8);
pwdArray[i * 2 + 0] = (byte) (unicodePwd[i] & 0xff);
}
System.out.print("encoded password: ");
for (int i = 0; i < pwdArray.length; i++)
{
System.out.print(pwdArray[i] + " ");
}
System.out.println();
ModificationItem[] mods = new ModificationItem[1];
mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("UnicodePwd", pwdArray));
ldapContext.modifyAttributes("cn=" + username + BASE_NAME, mods);
}
catch (Exception e)
{
System.out.println("update password error: " + e);
}
}
请注意,必须使用LDAPS(LDAP over SSL,通常在端口636上)才能设置密码。
您可以在设置密码的同一请求中将
userAccountControl
设置为512。