Java + ACtive Directory criação de contas e usuarios via script

Bom Dia a todos,

É o seguinte, estou tendo que criar conta e usuarios sempre no active directory, goataria de fazer isso via formulario (JAVA-JSP), goataria de saber se é possivel fazer isso, ou melhor, se pode ser implementado via java…

atc
Philype Castelo Branco

Acho que em algum daqueles livrões da Microsoft (Resource Kit) deve haver um script em VBScript que faça isso. Uma vez feito isso, chame-o pela sua aplicação Java.

Um exemplo:

import java.util.Hashtable;
import javax.naming.ldap.*;
import javax.naming.directory.*;
import javax.naming.*;
import javax.net.ssl.*;
import java.io.*;
 
public class CreateUser
{
	public static void main (String[] args)
	{	
		Hashtable env = new Hashtable();
		String adminName = "cn=admin,dc=ims,dc=EDU,dc=DTI";
		String adminPassword = "123";
		String userName =  "CN=usuario1,ou=Usuarios,dc=ims,dc=EDU,dc=DTI";
		String groupName = "CN=grupoTeste,ou=app1,ou=Sistemas,dc=ims,dc=EDU,dc=DTI";
		
		env.put(Context.SECURITY_AUTHENTICATION,"simple");
		env.put(Context.SECURITY_PRINCIPAL, "cn=admin,dc=ims,dc=EDU,dc=DTI");
		env.put(Context.SECURITY_CREDENTIALS, "123");
		env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
		env.put(Context.PROVIDER_URL, "ldaps://ipDoServidor:636");
		env.put(Context.SECURITY_PROTOCOL, "ssl");
				
		try {
 
			
			LdapContext ctx = new InitialLdapContext(env,null);
 
			Attributes attrs = new BasicAttributes(true); 
	    	
		    	
				BasicAttribute ocattr = new BasicAttribute("objectclass");
				ocattr.add("top");
				ocattr.add("person");
				ocattr.add("organizationalPerson");
				ocattr.add("user");
				attrs.put(ocattr);
				attrs.put("cn", userName);
				
				
			
			int UF_ACCOUNTDISABLE = 0x0002;
			int UF_PASSWD_NOTREQD = 0x0020;
			int UF_PASSWD_CANT_CHANGE = 0x0040;
			int UF_NORMAL_ACCOUNT = 0x0200;
			int UF_DONT_EXPIRE_PASSWD = 0x10000;
			int UF_PASSWORD_EXPIRED = 0x800000;
		
attrs.put("userAccountControl",Integer.toString(UF_NORMAL_ACCOUNT + UF_PASSWD_NOTREQD + UF_PASSWORD_EXPIRED+ UF_ACCOUNTDISABLE));
 
		
			Context result = ctx.createSubcontext(userName, attrs);
			System.out.println("Created disabled account for: " + userName);
 
                        //Para modificar a senha de um usuário no AD, a conexão     //deve ser SSL e a senha em Unicode
			StartTlsResponse tls = (StartTlsResponse)ctx.extendedOperation(new StartTlsRequest());
			tls.negotiate();
		
			ModificationItem[] mods = new ModificationItem[2];
		
			String newQuotedPassword = "\"321\"";
			byte[] newUnicodePassword = newQuotedPassword.getBytes("UTF-16LE");
 
			mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("unicodePwd", newUnicodePassword));
			mods[1] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("userAccountControl",Integer.toString(UF_NORMAL_ACCOUNT + UF_PASSWORD_EXPIRED)));
		
			ctx.modifyAttributes(userName, mods);
			System.out.println("Set password & updated userccountControl");
 
 
 
				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);
				}
			tls.close();
			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: Vá nos fóruns da Sun, na área de JNDI e procure pelos posts do usuário ‘adler_steven’. Tudo que você precisa fazer fazer com AD praticamente o cara postou exemplos lá.