Sincronização BD relacional com Ldap

1 resposta
Richeli

Olá Pessoas,

Bom estou com um problema aqui! Sei que é simples de resolver mas não estou conseguindo ver o caminho.

Seguinte: Tenho um bd relacional e uma base LDAP. Preciso sincronizar a base LDAP toda vez que adicionar um usuário. Criei para isso a classe LdapSynchronization. Esta recebe por parâmetro qual operação deve ser realizada No momento, a operação que me interessa é a de adicionar entrada. Se a operação selecionada for esta, chama a classe LdapAddEntry.

Esta classe que está sendo meu problema. Dentro dela eu tenho os métodos Connect(), getAttributes(), addEntry(),main. O método getAttributes() ainda não está implementado e num consigo ver como fazê-lo.

Neste método eu deveria pegar os dados do usuario adicionado. Estes deveriam vir de outra classe, estou me perdendo se ele vem da classe Pessoa ou da Classe Usuario. Estes atributos deveriam ser atribuidos as variáveis e setados através do attributeset

Segue os códigos:

Parcial - Classe CadastroUsuarioLogin Aqui é onde vou chamar a classe de sincronização
jButtonOk.addActionListener(new java.awt.event.ActionListener() {

				public void actionPerformed(java.awt.event.ActionEvent e) {
					if (jTextLogin.getText().length()>7 && jTextSenha.getText().length()>5) {
						//criando usuário a partir da Pessoa
						Usuario usu = new Usuario(pessoa.getId_pessoa(),jTextLogin.getText());
						try {
							SalvarUsuarioCommand com = (SalvarUsuarioCommand) Util.sendComand(new SalvarUsuarioCommand(usu));
							if (com.getException()!= null) {
								JOptionPane.showMessageDialog(null, com.getException().getMessage());
							} else {
								usuario=com.getUsuario();
								pessoa.setUsuario(usuario);

								//chama a classe sincronização
								@SuppressWarnings("unused")
								LdapSynchronization sinc = new LdapSynchronization(0);

								int opcao = JOptionPane.showConfirmDialog(null, "Usuario cadastrado com sucesso. Deseja editar grupo?", "Usuario cadastrado", JOptionPane.YES_NO_OPTION);
								if( opcao == 0 ){									
									UsuarioGrupo usuarioGrupo = new UsuarioGrupo(telaMatriz, pessoa);									
									usuarioGrupo.setVisible(true);
									dispose();
									((CadastroUsuario)telaMatriz).arrumaPessoa(pessoa);
								}
							}

						} catch (IOException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						} catch (ClassNotFoundException e1) {
							// TODO Auto-generated catch block
							e1.printStackTrace();
						}

					} else {
						jTextLogin.setText("");
						jTextSenha.setText("");
						JOptionPane.showMessageDialog(null, " O seu login deve ter pelo menos 8 letras. \n "+
						"A senha deve ter pelo menos 6 letras.");
					}
Classe LdapSynchronization
public class LdapSynchronization {

	private static int statusGravacao = -1;

	
	public LdapSynchronization(int statusGravacao){
		this.statusGravacao = statusGravacao;
	}

	@SuppressWarnings("static-access")
	public static void main(String[] args) {

		if(statusGravacao== 0){
			LdapAddEntry entrada = new LdapAddEntry();
			entrada.addEntry();
		}
	}
}
Classe LdapAddEntry
import com.novell.ldap.LDAPAttribute;

import com.novell.ldap.LDAPAttributeSet;

import com.novell.ldap.LDAPEntry;

import com.novell.ldap.LDAPConnection;

import com.novell.ldap.LDAPException;

import java.io.UnsupportedEncodingException;


public class LdapAddEntry{
	//conexão
	private final static int ldapPort = LDAPConnection.DEFAULT_PORT;
	private final static int ldapVersion  = LDAPConnection.LDAP_V3;
	private static String ldapHost = "localhost";
	private static String loginDN = "cn=admin,dc=ufpr,dc=br";
	private static String password = "1sht4rcc3";
	private static boolean isconected =false;
	static LDAPConnection conexao = new LDAPConnection ();
	static String containerName  ="ou=people,dc=ufpr,dc=br";
	//atributos
	LDAPAttribute  attribute = null;
	static LDAPAttributeSet attributeSet = new LDAPAttributeSet();
	private static String objectclass;
	private static String cn ="" ;
	private static String sn ="";
	private static String userpassword;
	private static String uid;

	private static String name; // deve pegar o nome inteiro do usuario

	private static int contEsp;

	
	//metodo que faz a conexão
	public static boolean Connect(){

		try {
		
			conexao.connect( ldapHost, ldapPort );
			
			conexao.bind( ldapVersion, loginDN, password.getBytes("UTF8") );

			if(conexao.isConnected()){
				isconected = true;
				System.out.println("Conectado: "+ isconected);
			}
		}catch( LDAPException e ) {
			System.out.println( "Error: " + e.toString() );
		}catch( UnsupportedEncodingException e ) {
			System.out.println( "Error: " + e.toString() );
		}
		return isconected;

	}
	/*
	 * <Método ainda não implementado. A idéia é pegar o nome da pessoa que foi salva como usuário
	 * e atribvuir dividindo em CN e SN.
	 * Em seguida pegar login e senha informados e atribuir às variáveis userpassword e  uid> 
	 */
	public static void getAttributes(){

		//Divisão em Cn e Sn. ****Falta pegar o nome
		for(int i=0;i<name.length();i++){
			if (name.charAt(i)== ' '){
				contEsp++;
			}
			if(contEsp==0){
				cn = cn+name.charAt(i);
			}else
				sn = sn+name.charAt(i);
		}
		System.out.println("CN: "+cn+" - SN: "+sn);


		//falta pegar o login e a senha do individuo
	}


	public static void addEntry(){

		attributeSet.add( new LDAPAttribute("objectclass", objectclass));                
		attributeSet.add( new LDAPAttribute("cn", cn));               
		attributeSet.add( new LDAPAttribute("sn", sn));        
		attributeSet.add( new LDAPAttribute("userpassword", userpassword));
		attributeSet.add( new LDAPAttribute("uid", uid));

		String  dn  = "uid="+uid+containerName;      
		LDAPEntry newEntry = new LDAPEntry( dn, attributeSet );

		try{
			conexao.add(newEntry);
			System.out.println("\nUsuário" + dn + " Adicionado com sucesso." );
			conexao.disconnect();
		}catch( LDAPException e ) {
			System.out.println("Error:  " + e.toString());
		}                                   
		System.exit(0);
	}

	@SuppressWarnings("static-access")
	public static void main( String[] args ){
		try{
			Connect();
		}catch (Exception e) {
			System.out.println( "Error:  " + e.toString());
		}
		
		if (isconected){
			try {
				getAttributes();
				
				LdapSearch pesquisa = new LdapSearch(uid);
				pesquisa.FoundUser(uid);
				
				if (pesquisa.FoundUser(uid)){
					addEntry();
				}

			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

		}else{
			System.out.println("Não foi possível adicionar a nova entrada");
		}
	}
}
Classe LdapSearch Classe de pesquisa
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
import java.util.Iterator;

import com.novell.ldap.LDAPAttribute;
import com.novell.ldap.LDAPAttributeSet;
import com.novell.ldap.LDAPConnection;
import com.novell.ldap.LDAPControl;
import com.novell.ldap.LDAPEntry;
import com.novell.ldap.LDAPException;
import com.novell.ldap.LDAPSearchResults;
import com.novell.ldap.util.Base64;

public class LdapSearch extends LDAPControl {

	private static final long serialVersionUID = 1L;

	//	conexão
	private final static int ldapPort = LDAPConnection.DEFAULT_PORT;
	private final static int ldapVersion  = LDAPConnection.LDAP_V3;
	private static String ldapHost = "localhost";
	private static String loginDN = "cn=admin,dc=ufpr,dc=br";
	private static String password = "1sht4rcc3";
	private static boolean isconected =false;
	static LDAPConnection conexao = new LDAPConnection ();
	static String containerName  ="ou=people,dc=ufpr,dc=br";
	private static int searchScope = LDAPConnection.SCOPE_ONE;
	private static String searchFilter;
	private static boolean userFound = false;

	@SuppressWarnings("static-access")
	public LdapSearch(String uid){
		this.searchFilter = uid;
	}

	//	metodo que faz a conexão
	public static boolean Connect(){

		try {
			// connect to the server
			conexao.connect( ldapHost, ldapPort );
			// bind to the server
			conexao.bind( ldapVersion, loginDN, password.getBytes("UTF8") );

			if(conexao.isConnected()){
				isconected = true;
				System.out.println("Conectado: "+ isconected);
			}
		}catch( LDAPException e ) {
			System.out.println( "Error: " + e.toString() );
		}catch( UnsupportedEncodingException e ) {
			System.out.println( "Error: " + e.toString() );
		}
		return isconected;

	}

	public static boolean FoundUser(String uid) throws UnsupportedEncodingException{
		searchFilter = uid;
		try{
			LDAPSearchResults searchResults =conexao.search(containerName,searchScope,searchFilter,null,false);

			if (!searchResults.hasMore()){
				System.out.println("Nenhum resultado Encontrado");
			}else{
				while ( searchResults.hasMore()) {
					LDAPEntry nextEntry = null;
					try {
						nextEntry = searchResults.next();
					}catch(LDAPException e) {
						System.out.println("Error: " + e.toString());
						// Exception is thrown, go for next entry
						if(e.getResultCode() == LDAPException.LDAP_TIMEOUT || e.getResultCode() == LDAPException.CONNECT_ERROR)
							break;
						else
							continue;
					}

					System.out.println("\n" + nextEntry.getDN());
					System.out.println("Atributos: ");
					LDAPAttributeSet attributeSet = nextEntry.getAttributeSet();
					Iterator allAttributes = attributeSet.iterator();

					while(allAttributes.hasNext()) {
						LDAPAttribute attribute =(LDAPAttribute)allAttributes.next();
						String attributeName = attribute.getName();
						System.out.println("    "+attributeName);
						Enumeration allValues = attribute.getStringValues();

						if( allValues != null) {
							while(allValues.hasMoreElements()) {
								String Value = (String) allValues.nextElement();

								if (Base64.isLDIFSafe(Value)) {
									// is printable
									System.out.println("      " + Value);
								}else {
									// base64 encode and then print out
									Value = Base64.encode(Value.getBytes());
									System.out.println("      " + Value);
								}
							}
						}
					}
				}
			}    
			// disconnect with the server
			conexao.disconnect();

		}catch( LDAPException e ) {
			System.out.println( "Error: " + e.toString() );
		}
		return userFound;

	}

	public static void main( String[] args) {
		try {
			FoundUser(searchFilter);
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

Se alguém tiver a paciência de ler e analisar este código e puder em ajudar, eu agradeço!

1 Resposta

Richeli

Resumindo pra facilitar a ajuda:

*Não estou conseguindo pegar os valores das variáveis vindas de outras classes

Criado 27 de julho de 2007
Ultima resposta 27 de jul. de 2007
Respostas 1
Participantes 1