Vraptor + Spring LDAP

3 respostas
marcelomello

Olá pessoal,

Estou tentando fazer com que minha aplicação implementada no VRaptor autentique usuários
no LDAP. Para isso, comecei a usar o Spring LDAP. Encontrei o exemplo abaixo, o testei e
funcionou. O problema é que não consigo “migrar” esse exemplo para a estrutura/sintaxe do
VRaptor. Alguém pode me ajudar?

//Classe principal
public class TestLDAPClient {
    public static void main(String[] args) {

        try {

            Resource resource = new ClassPathResource("springldap.xml");
            BeanFactory factory = new XmlBeanFactory(resource);
            ContactDAO ldapContact = (LDAPContactDAO)factory.getBean("ldapContact");
            List contactList = ldapContact.getContactDetails("usuario123", "123");            
            for( int i = 0 ; i < contactList.size(); i++){
                System.out.println("Contact Name " + contactList.get(i));
            }

        } catch (Exception e) {
            System.out.println("Error occured " + e.getCause());
        }
}
public class LDAPContactDAO implements ContactDAO{

    private LdapTemplate ldapTemplate;

    public void setLdapTemplate(LdapTemplate ldapTemplate) {
        this.ldapTemplate = ldapTemplate;
    }

    public List getContactDetails(String username, String password){
        AndFilter andFilter = new AndFilter();
        andFilter.and(new EqualsFilter("objectclass","person"));
        andFilter.and(new EqualsFilter("uid", username));
        System.out.println("LDAP Query " + andFilter.encode());
        return ldapTemplate.search("", andFilter.encode(),new ContactAttributeMapper());
    }
}
public interface ContactDAO {

	public List getContactDetails(String username, String password);
}
//springldap.xml
<beans>
	<bean id="contextSource"
		class="org.springframework.ldap.core.support.LdapContextSource">
		<property name="url" value="ldap://111.11.11.1:111" />
		<property name="base" value="dc=teste,dc=com,dc=br" />
	</bean>
	<bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate">
		<constructor-arg ref="contextSource" />
	</bean>
	<bean id="ldapContact"
		class="br.gov.sc.epagri.ciram.cq.web.ldap.LDAPContactDAO">
		<property name="ldapTemplate" ref="ldapTemplate" />
	</bean>
</beans>

3 Respostas

Lucas_Cavalcanti

só colocar esse código do springldap.xml num applicationContext.xml no classpath que vai funcionar com o VRaptor automaticamente

F

Lucas,

Estou na mesma situação.

Como você sugeriu, coloquei o applicationContext.xml no classpath.

Só que eu precisava utilizar métodos da classe LdapTemplate. Para isso fiz o seguinte service:

@Component
public class LoginServiceImpl<T> implements ILoginService {

    private static final Log log = LogFactory.getLog(LoginServiceImpl.class);
    
    private Result result;

    private LdapTemplate ldapTemplate;

    //Constructor
    public LoginServiceImpl(Result result, LdapTemplate ldapTemplate) {

        this.result = result;
        this.ldapTemplate = ldapTemplate;

    }

}

Ao rodar a aplicação, dá o seguinte erro:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name loginServiceImpl: Unsatisfied dependency expressed through constructor argument with index 1 of type [org.springframework.ldap.core.LdapTemplate]: : No matching bean of type [org.springframework.ldap.core.LdapTemplate] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.springframework.ldap.core.LdapTemplate] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}

.

.

 53 more

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.springframework.ldap.core.LdapTemplate] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}

.

.

 67 more

Alguma idéia?

Obrigada.

Lucas_Cavalcanti

não precisa fazer alguma configuração a mais no applicationContext pra usar o LdapTemplate?

Criado 30 de maio de 2011
Ultima resposta 1 de jun. de 2011
Respostas 3
Participantes 3