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

2 respostas
P

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

2 Respostas

T

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.

R

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á.

Criado 2 de março de 2007
Ultima resposta 2 de mar. de 2007
Respostas 2
Participantes 3