LDAP验证 [英] LDAP Authentication

查看:71
本文介绍了LDAP验证的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要针对ADS验证用户身份.在此之前,我需要从ADS获取用户和用户详细信息.我正在使用spring和LDAP.有人可以建议我这样做的好方法吗?一个例子会有所帮助.

I have a requirement of authenticating users against ADS. before that i need to fetch the Users and user details from the ADS. Am using springs and LDAP. can anyone suggest me a good way to do this? An example will be helpful.

推荐答案

我们需要所有必需的库.您可以使用此链接下载所有jar文件. http://hotfile.com/dl/9807349/836e03e/final_jar_col.rar.html其中包含我们需要的所有文件,包括公用库,log4j等.

we need all necessary libraries. You can download all jar files using this link. http://hotfile.com/dl/9807349/836e03e/final_jar_col.rar.html This contains all the files we need, including commons libraries, log4j, etc.

创建以下类.所有的类都可以放在一个包目录中,然后按自己的方式将其添加到包中.

Create the following classes. All the classes can be placed in one package directory, you add it to package in your way.

定义两个功能.一种是获取所有联系人的姓名,另一种是获取联系人的详细信息.

Define two functions. One is for getting all contact names, another is for getting contact details.

import java.util.List;

public interface ContactDAO {

    public List getAllContactNames();

    public List getContactDetails(String commonName);

}

LDAPContactDAO 实现定义的接口.

LDAPContactDAO Implement the interface defined.

import java.util.List;

import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;

import org.springframework.ldap.AttributesMapper;
import org.springframework.ldap.LdapTemplate;
import org.springframework.ldap.support.DistinguishedName;
import org.springframework.ldap.support.filter.AndFilter;
import org.springframework.ldap.support.filter.EqualsFilter;

public class LDAPContactDAO implements ContactDAO{
    private LdapTemplate ldapTemplate;

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

    public List getAllContactNames() {
        return ldapTemplate.search("", "(objectClass=person)",
                new AttributesMapper() {
                    public Object mapFromAttributes(Attributes attrs)
                            throws NamingException {
                        return attrs.get("mail").get();
                    }
                });
    }

    public List getContactDetails(String objectclass){
        AndFilter andFilter = new AndFilter();
        andFilter.and(new EqualsFilter("objectClass",objectclass));
        System.out.println("LDAP Query " + andFilter.encode());
        return ldapTemplate.search("", andFilter.encode(),new ContactAttributeMapper());

    }
}

springldap.xml

springldap.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
    <bean id="contextSource"
        class="org.springframework.ldap.support.LdapContextSource">
        <property name="url" value="ldap://your.ldap.url:389" />
        <property name="base" value="base, be careful to put it right" />
        <property name="userName" value="your username" />
        <property name="password" value="password" />
    </bean>
    <bean id="ldapTemplate" class="org.springframework.ldap.LdapTemplate">
        <constructor-arg ref="contextSource" />
    </bean>
    <bean id="ldapContact"
        class="com.javaworld.sample.LDAPContactDAO">
        <property name="ldapTemplate" ref="ldapTemplate" />
    </bean>
</beans>

ContactAttributeMapper

ContactAttributeMapper

import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;

import org.springframework.ldap.AttributesMapper;

public class ContactAttributeMapper implements AttributesMapper{

    public Object mapFromAttributes(Attributes attributes) throws NamingException {
        ContactDTO contactDTO = new ContactDTO();

        Attribute mail = attributes.get("mail");
        Attribute sap = attributes.get("employeeNumber");
        if(mail != null)
            contactDTO.setMail((String)mail.get());
        if(sap != null)
            contactDTO.setSap((String)sap.get());

        return contactDTO;
    }

}

ContactDTO

ContactDTO

public class ContactDTO {

    String mail;
    String sap;
    public String getSap() {
        return sap;
    }
    public void setSap(String sap) {
        this.sap = sap;
    }
    public String getMail() {
        return mail;
    }
    public void setMail(String mail) {
        this.mail = mail;
    }

    public String toString() {
        StringBuffer contactDTOStr = new StringBuffer("Person=[");

        contactDTOStr.append(" mail = " + mail);
        contactDTOStr.append(" ]");
        return contactDTOStr.toString();
    }
}

测试类:SpringFrameworkLDAPClient

the testing class: SpringFrameworkLDAPClient

import java.util.List;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.dao.DataAccessException;

public class SpringFrameworkLDAPClient {

    public static void main(String[] args) {
        //Resource resource = new ClassPathResource("/SpringLDAPClient/src/com/javaworld/sample/springldap.xml");
        //System.out.println(resource.toString());
        try {
            Resource resource = new ClassPathResource("springldap.xml");
            BeanFactory factory = new XmlBeanFactory(resource);
            System.out.println(factory.toString() + "\n");

            ContactDAO ldapContact = (LDAPContactDAO)factory.getBean("ldapContact");    

            List contactList = ldapContact.getContactDetails("30662");
            //List contactList =ldapContact.getAllContactNames();
            //System.out.println(contactList.size());
            int count = 0;
            for( int i = 0 ; i < contactList.size(); i++){
                System.out.print("Email: " + ((ContactDTO) contactList.get(i)).getMail() + "  ");
                System.out.println("SAP: " + ((ContactDTO) contactList.get(i)).getSap());
                count++;
            }
            System.out.println("\n" + count);

        } catch (DataAccessException e) {
            System.out.println("Error occured " + e.getCause());
        }
    }
}

首先使用活动目录浏览器来获取您的域的详细信息.然后相应地执行上述操作.

First use active directory explorer to get the details of your domain. then do the above accordingly.

这篇关于LDAP验证的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆