Java 如何在Ldap中将用户帐户控制属性修复为512
使用Java代码,我试图在AD LDAP中装箱用户,但我无法将Java 如何在Ldap中将用户帐户控制属性修复为512,java,active-directory,ldap,Java,Active Directory,Ldap,使用Java代码,我试图在AD LDAP中装箱用户,但我无法将userAccountControl状态设置为512,尽管我试图通过代码将状态传递为512,但用户是使用不同的userAccountControl状态544创建的 当用户被创建时,我不能用他的id(DN)和密码登录LDAP 我正在使用代码: attributes.add(new LDAPAttribute("userAccountControl", "512")); attributes.add(new LDAPAttribute("
userAccountControl
状态设置为512,尽管我试图通过代码将状态传递为512,但用户是使用不同的userAccountControl
状态544创建的
当用户被创建时,我不能用他的id(DN)和密码登录LDAP
我正在使用代码:
attributes.add(new LDAPAttribute("userAccountControl", "512"));
attributes.add(new LDAPAttribute("userPassword", "Password@1"));
是否有其他方法可以将
userAccountControl
设置为512?544的userAccountControl
值为512+32,这可能是因为创建密码时它没有密码。如果没有密码,则无法将其设置为512
必须在创建帐户后的第二步中设置密码。AD有点奇怪,因为userPassword
属性甚至存在,而它只是有时按照您想象的方式运行。如果你想的话,你可以读一下。但是你最好还是直接设置,虽然它的格式有点奇怪,但效果总是一样的
下面是一个Java示例:
public void updateUserPassword(字符串用户名、字符串密码)
{
尝试
{
System.out.println(“更新密码…\n”);
字符串quotedPassword=“\”+密码+“\”;
char unicodePwd[]=quotedPassword.toCharArray();
字节pwdArray[]=新字节[unicodePwd.length*2];
for(int i=0;i>>8);
pwdArray[i*2+0]=(字节)(unicodePwd[i]&0xff);
}
系统输出打印(“编码密码:”);
对于(int i=0;i
请注意,您必须使用LDAPS(LDAP over SSL,通常在端口636上)才能设置密码
您可以在设置密码的同一请求中将userAccountControl
设置为512
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);
}
}