Ajuda para chamar classe e enviar valores [RESOLVIDO]

5 respostas
M

Pessoal, alguém pode me dar uma ajuda!

No meu servlet, preciso chamar uma classe e enviar alguns valores para execução, só que qdo eu chamo e envio os valores nada acontece.

Estou chamando a classe assim do meu servlet:

CadastraUserLdap add = new CadastraUserLdap();
add.setUsuario(usuario);
add.setSenha(senha);

e a classe deve receber os valores e executar.

Esta é a classe:

package util;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Hashtable;   

import javax.naming.Context;   
import javax.naming.NamingException;   
import javax.naming.ldap.InitialLdapContext;   
import javax.naming.ldap.LdapContext; 
import javax.naming.directory.SearchControls;   
import javax.naming.directory.SearchResult;   
import javax.naming.NamingEnumeration;   
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;   
import javax.naming.directory.DirContext;   
import javax.naming.directory.InitialDirContext;   
import util.*;
 
public class CadastraUserLdap {   

	private static LdapContext ctx;   
    private final String URL_LDAP = "ldap://ldap.teste.com:389";  
	
	private String usuario = null;
	private String senha = null;
	
	public String getUsuario() {
		return usuario;
	}
	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	} 

         
public boolean verificaUsuario(String usuario, String senha) throws NamingException {   
		
		Hashtable env = new Hashtable();         
  
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");   
        env.put(Context.PROVIDER_URL, URL_LDAP);   
        env.put(Context.SECURITY_AUTHENTICATION, "simple");   
        env.put(Context.SECURITY_PRINCIPAL, usuario);   
        env.put(Context.SECURITY_CREDENTIALS, senha);   
        
       
           
        // Tenta criar o contexto com os dados de login   
        try {   
        	ctx = new InitialLdapContext(env,null);  
        	
           	// Login válido
            return true;   
           
        } catch (javax.naming.AuthenticationException e) {   
            // Login inválido   
            return false;   
        }  
	}


public static void main(String[] args) {   
	
	CadastraUserLdap l = new CadastraUserLdap();   
  	try {		
  		if (l.verificaUsuario("uid="+l.getUsuario()+",ou=teste,o=teste.com",l.getSenha())) {

		String base = "ou=teste,o=teste.com";
		Object name = null;
		SearchControls sc = new SearchControls();   
		String[] attributeFilter = { "displayName" };   
		sc.setReturningAttributes(attributeFilter);   
		sc.setSearchScope(SearchControls.SUBTREE_SCOPE);   

		String filter = "(uid="+l.getUsuario()+")";   

		NamingEnumeration results = ctx.search(base, filter, sc);   
		while (results.hasMore()) {   
			SearchResult sr = (SearchResult) results.next();   
			Attributes attrs = sr.getAttributes();   

			if (attrs.get("displayName").get()==null || attrs.get("displayName").get().equals("")){

				name="null";

			}  
			else {

				name = attrs.get("displayName").get(); 
				name = name.toString().replace("'", "");
				name = name.toString().replace("\"", "");
				
				//HttpSession sessao = request.getSession();
				//sessao.setAttribute("nameLdap", name);
				System.out.println(name);
			}
		}
  		}
	} catch (NamingException n) {   
		n.printStackTrace();   
	} 
  }	
}

Obs: Qdo eu rodo a classe separadamente, ela roda tudo certinho.

Agradeço a ajuda

5 Respostas

pedruhenrik

acho q na sua servlet vc tem que chamar o metodo verificaUsuario passando como param 1 String usuario e 1 String senha.
algo do tipo:

CadastraUserLdap add = new CadastraUserLdap();  
add.setUsuario(usuario);  
add.setSenha(senha); 
add.verificaUsuario(add.getUsuario, add.getSenha);

Ou tenta mudar o metódo para passar o “usuario” inteiro e la vc trabalha com os atributos:

public boolean verificaUsuario(CadastraUserLdap usuario)

mas com certeza deve ter outra maneira mais interessante fora essas 2 que eu citei…hehe

boa sorte!

M

Blz Pedru,

Mas se eu chamar o método “verificaUsuario” a classe vai executar esta parte do código?

public static void main(String[] args) {     
       
    CadastraUserLdap l = new CadastraUserLdap();     
    try {         
        if (l.verificaUsuario("uid="+l.getUsuario()+",ou=teste,o=teste.com",l.getSenha())) {   
  
        String base = "ou=teste,o=teste.com";   
        Object name = null;   
        SearchControls sc = new SearchControls();     
        String[] attributeFilter = { "displayName" };     
        sc.setReturningAttributes(attributeFilter);     
        sc.setSearchScope(SearchControls.SUBTREE_SCOPE);     
  
        String filter = "(uid="+l.getUsuario()+")";     
  
        NamingEnumeration results = ctx.search(base, filter, sc);     
        while (results.hasMore()) {     
            SearchResult sr = (SearchResult) results.next();     
            Attributes attrs = sr.getAttributes();     
  
            if (attrs.get("displayName").get()==null || attrs.get("displayName").get().equals("")){   
  
                name="null";   
  
            }     
            else {   
  
                name = attrs.get("displayName").get();   
                name = name.toString().replace("'", "");   
                name = name.toString().replace("\"", "");   
                   
                //HttpSession sessao = request.getSession();   
                //sessao.setAttribute("nameLdap", name);   
                System.out.println(name);   
            }   
        }   
        }   
    } catch (NamingException n) {     
        n.printStackTrace();     
    }   
  }
pedruhenrik

Marcos_rhs,

vê se ajuda: [url]http://www.guj.com.br/article.show.logic?id=121[/url]

tenta assim:

public void executa(CadastraUserLdap l ) {
		try {
			if (l.verificaUsuario("uid=" + l.getUsuario()
					+ ",ou=teste,o=teste.com", l.getSenha())) {

				String base = "ou=teste,o=teste.com";
				Object name = null;
				SearchControls sc = new SearchControls();
				String[] attributeFilter = { "displayName" };
				sc.setReturningAttributes(attributeFilter);
				sc.setSearchScope(SearchControls.SUBTREE_SCOPE);

				String filter = "(uid=" + l.getUsuario() + ")";

				NamingEnumeration results = ctx.search(base, filter, sc);
				while (results.hasMore()) {
					SearchResult sr = (SearchResult) results.next();
					Attributes attrs = sr.getAttributes();

					if (attrs.get("displayName").get() == null
							|| attrs.get("displayName").get().equals("")) {

						name = "null";

					} else {

						name = attrs.get("displayName").get();
						name = name.toString().replace("'", "");
						name = name.toString().replace("\"", "");

						// HttpSession sessao = request.getSession();
						// sessao.setAttribute("nameLdap", name);
						System.out.println(name);
					}
				}
			}
		} catch (NamingException n) {
			n.printStackTrace();
		}
	}

e na sua servlet chama assim:

CadastraUserLdap add = new CadastraUserLdap();  
add.setUsuario(usuario);  
add.setSenha(senha); 
add.executa(add);

funciona???rs

M

pedruhenrik,

Cara, funcionou direitinho… Obrigado pela ajuda.

pedruhenrik

q bom! :smiley:

precisando estamos aqui de segunda a sexta das 09:00 as 18:00, sab,dom e feriados das 10:00 as 16:00

uahuahuahu

agora Marcos_rhs se a solução foi satisfatória põe um [RESOLVIDO] no tópico blz?

abs!

Criado 9 de junho de 2010
Ultima resposta 10 de jun. de 2010
Respostas 5
Participantes 2