gpt4 book ai didi

java - 如何通过 Java 客户端创建新用户并将其添加到 Active Directory 中的现有组

转载 作者:搜寻专家 更新时间:2023-11-01 03:40:22 26 4
gpt4 key购买 nike

我是初学者,我尝试用 Java 为 Active Directory 实现客户端。到目前为止,我已经编写了以下代码:

import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;

public class NewUser {

public static void main(String[] args) {
NewUser user = new NewUser("aaa", "bbb", "ccc", "orgunit");
try {
System.out.print(user.addUser());
} catch (NamingException e) {
e.printStackTrace();
}
}

private static final String DOMAIN_NAME = "whatever";
private static final String DOMAIN_ROOT = "dc=xyz"; // ?
private static final String ADMIN_NAME = "CN=Administrator,CN=Users,DC=xyz,DC=xyz";
private static final String ADMIN_PASS = "xxxxxxx";
private static final String DOMAIN_URL = "ldap://xxx.xxx.xx.xx:389";


private String userName, firstName, lastName, organisationUnit;
private LdapContext context;

public NewUser(String userName, String firstName, String lastName, String organisationUnit) {

this.userName = userName;
this.firstName = firstName;
this.lastName = lastName;
this.organisationUnit = organisationUnit;

Hashtable<String, String> env = new Hashtable<String, String>();

env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");

env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, ADMIN_NAME);
env.put(Context.SECURITY_CREDENTIALS, ADMIN_PASS);

env.put(Context.PROVIDER_URL, DOMAIN_URL);
try {
this.context = new InitialLdapContext(env, null);
} catch (NamingException e) {
System.err.println("Problem creating object: ");
e.printStackTrace();
}
}

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);

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

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

private static String getUserDN(String aUsername, String aOU) {
return "cn=" + aUsername + ",ou=" + aOU + "," + DOMAIN_ROOT;
}
}

我只需要创建和添加一个用户。

我遇到了以下错误:

javax.naming.PartialResultException: [LDAP: error code 10 - 0000202B: RefErr: DSID 031007F3, data 0, 1 access points

ref 1: 'xyz'

]; remaining name 'cn=bbb ccc,ou=orgunit,dc=xyz'

最佳答案

您将需要知道要在其中创建用户的 FDN 以及它的存在。

我建议您获取其中一种 LDAP 浏览器,ldapwiki.willeke.com/wiki/LDAP%20Browsers,这样您就可以从 LDAP 中查看您的 AD。

您可能还会发现这有帮助:ldapwiki.willeke.com/wiki/Determining%20the%20FDN

关于java - 如何通过 Java 客户端创建新用户并将其添加到 Active Directory 中的现有组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16279788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com