通过LDAP在AD域控上进行添加、删除、修改、查询等各种操作

http://www.cnblogs.com/qlong8807/archive/2012/11/12/2766226.html


LDAP操作代码样例  初始化LDAP 目录服务上下文 
该例子中,我们使用uid=linly,ou=People,dc=jsoso,dc=net这个账号,链接位于本机8389端口的LDAP服务器(ldap://localhost:8389),认证方式采用simple类型,即用户名/密码方式。 

private static void initialContext() throws NamingException{ 
   if(singleton == null){ 
    singleton = new LDAPConnection(); 
    /* 
    * 在实际编码中,这些环境变量应尽可能通过配置文件读取 
    */ 
    //LDAP服务地址 
    singleton.sLDAP_URL = "ldap://localhost:8389"; 
    //管理员账号 
    singleton.sMANAGER_DN = "uid=linly,ou=People,dc=jsoso,dc=net"; 
    //管理员密码 
    singleton.sMANAGER_PASSWORD = "coffee"; 
    //认证类型 
    singleton.sAUTH_TYPE = "simple"; 
    //JNDI Context工厂类 
    singleton.sCONTEXT_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory"; 
   
    singleton.envProps.setProperty(Context.INITIAL_CONTEXT_FACTORY, singleton.sCONTEXT_FACTORY); 
    singleton.envProps.setProperty(Context.PROVIDER_URL, singleton.sLDAP_URL); 
    singleton.envProps.setProperty(Context.SECURITY_AUTHENTICATION, singleton.sAUTH_TYPE); 
    singleton.envProps.setProperty(Context.SECURITY_PRINCIPAL, singleton.sMANAGER_DN); 
    singleton.envProps.setProperty(Context.SECURITY_CREDENTIALS, singleton.sMANAGER_PASSWORD); 
    /* 
    * 绑定ldap服务器 
    */ 
    singleton.dirCtx = new InitialDirContext(singleton.envProps); 
   } 


通过一个Hashtable或者Properties对象为LDAP的Context设置参数,而后初始化InitialDirContext,即可绑定LDAP服务。这相当于JDBC中获取数据库的Connection对象。 

绑定/创建LDAP条目对象
用户可以使用bind方法创建新的LDAP条目,下面的代码创建一个DN:"ou=Employee , dc=jsoso ,dc=net"的OrganizationUnit类LDAP条目如下: 


public boolean createOrganizationUnit(){ 
   String ldapGroupDN = "ou=Employee , dc=jsoso ,dc=net"; 
   try { 
    /* 
    * 查找是否已经存在指定的OU条目 
    * 如果存在,则打印OU条目的属性信息 
    * 如果不存在,则程序会抛出NamingException异常,进入异常处理 
    */ 
    Attributes attrs = dirContext.getAttributes(ldapGroupDN); 
    System.out.println("Find the group , attributes list :"); 
    NamingEnumeration<String> nEnum = attrs.getIDs();   
    for( ; nEnum.hasMore() ; ){ 
     String attrID = nEnum.next(); 
     Attribute attr = (Attribute)attrs.get(attrID); 
     System.out.println(attr.toString()); 
    }   
    return false; 
   } catch (NamingException e) { 
    /* 
    * 没有找到对应的Group条目,新增Group条目 
    */ 
    //创建objectclass属性 
    Attribute objclass = new BasicAttribute("objectclass"); 
    objclass.add("top"); 
    objclass.add("organizationalunit"); 
    //创建cn属性 
    Attribute cn = new BasicAttribute("ou", "Employee"); 
    //创建Attributes,并添加objectclass和cn属性 
    Attributes attrs = new BasicAttributes(); 
    attrs.put(objclass); 
    attrs.put(cn); 
    //将属性绑定到新的条目上,创建该条目 
    try { 
     dirContext.bind(ldapGroupDN, null, attrs); 
     System.out.println("Group created successful"); 
     return true; 
    } catch (NamingException e1) { 
     e1.printStackTrace(); 
    }    
   } 
   return false; 



获取条目属性 
下面一段代码获取entryDN参数指定条目中的属性集合,并打印到控制台 

/** 
* 获取一个指定的LDAP Entry 
* @param entryDN 
*/ 
public void find(String entryDN){ 
   try { 
    Attributes attrs = dirContext.getAttributes(entryDN); 
    if (attrs != null) { 
     NamingEnumeration<String> nEnum = attrs.getIDs(); 
     for( ; nEnum.hasMore() ; ){ 
      String attrID = nEnum.next(); 
      Attribute attr = (Attribute)attrs.get(attrID); 
      System.out.println(attr.toString()); 
     } 
     System.out.println(); 
    }else{ 
     System.out.println("No found binding."); 
    } 
   }catch(NamingException ne) { 
    ne.printStackTrace(); 
   } 


修改条目属性 
修改DN=user.getDistinguishedName()的条目中的cn、givenname、sn和userpassword四个属性值。 
(注:参数DirContext.REPLACE_ATTRIBUTE有另外两个常量:DirContext.ADD_ATTRIBUTE;DirContext.REMOVE_ATTRIBUTE,分别表示新增属性和删除属性。) 

/** 
* 修改用户信息 
* @param user 
* @return 
* @throws Exception 
*/ 
public boolean modifyUser(LDAPUser user) throws Exception { 
   //用户对象为空 
   if (user == null) { 
    throw new Exception("No user information!n"); 
   } 

   //检查uid 
   String userDN = user.getDistinguishedName(); 
   if (userDN == null && userDN.length() == 0) { 
    throw new NamingException("No userDN you specify!n"); 
   } 

   //判断用户条目是否已经存在 
   if(!isUserexist(userDN)){ 
    return false; 
   } 
  
   //设置属性 
   Attributes attrs = new BasicAttributes(); 
   setBasicAttribute(attrs, "cn", user.getCommomName()); 
   setBasicAttribute(attrs, "givenname", user.getFirstName()); 
   setBasicAttribute(attrs, "sn", user.getLastName()); 
   setBasicAttribute(attrs, "userpassword", user.getPassword()); 
   //修改属性 
   try{ 
    dirContext.modifyAttributes(user.getDistinguishedName(),DirContext.REPLACE_ATTRIBUTE, attrs); 
    System.out.println("User(" + user.getDistinguishedName() + ") information modified.n"); 
    return true; 
   }catch(NamingException ne){ 
    ne.printStackTrace(); 
   } 
   return false; 




根据属性集搜索条目 
根据属性集matchingAttributes中的匹配值,在上下文DN= "ou=People,dc=jsoso ,dc=net"中搜索它的所有子树中的匹配条目。 
(注:SearchControls的SCOPE参数详见SearchControls SCOPE补充说明) 

          /** 
* 通过属性搜索LDAP范例 
* @return 
*/ 
public void searchByAttribute(Attributes matchingAttributes){ 
   String baseDN = "ou=People,dc=jsoso ,dc=net"; 
   SearchControls cons = new SearchControls(); 
   cons.setSearchScope(SearchControls.SUBTREE_SCOPE); 
   try { 
    Name baseName = new LdapName(baseDN); 
    NamingEnumeration<SearchResult> ne = dirContext.search(baseName, matchingAttributes); 
    SearchResult entry = null; 
    for(;ne.hasMore();){ 
     entry = ne.next(); 
     showEntry(entry); 
    }     
   } catch (NamingException e) { 
    e.printStackTrace(); 
   } 


根据过滤器搜索条目 
根据过滤器条件,在上下文DN = "ou=People,dc=jsoso ,dc=net"中,搜索它的所有子树中的匹配条目。 
(注:过滤器filter的相关语法详见LDAP filter语法补充说明) 

/** 
* 通过过滤器搜索LDAP范例 
* @return 
*/ 
public void searchByFilter(String filter){ 
   String baseDN = "ou=People,dc=jsoso ,dc=net";   
   SearchControls cons = new SearchControls(); 
   cons.setSearchScope(SearchControls.SUBTREE_SCOPE); 
   try { 
    NamingEnumeration<SearchResult> ne = dirContext.search(baseDN, filter , cons); 
    SearchResult entry = null; 
    for(;ne.hasMore();){ 
     entry = ne.next(); 
     showEntry(entry); 
    }     
   } catch (NamingException e) { 
    e.printStackTrace(); 
   } 

 

这里的内容是抄录别人的,自己写的没有别人写的这份全。这里的增加用户,增加组织单元,查找用户都经过了我的验证,没有问题。但是修改我没有验证通过。

删除没有做,但是从API上看,是没有问题的。 详细内容可以去百度文库搜:LDAP实用资料收录3.doc 。

该例子中,我们使用uid=linly,ou=People,dc=jsoso,dc=net这个账号,链接位于本机8389端口的LDAP服务器(ldap://localhost:8389),认证方式采用simple类型,即用户名/密码方式。

Java代码 

<span style="font-family:Verdana;font-size:12px;">   private static void initialContext() throws NamingException{   
       if(singleton == null){   
           singleton = new LDAPConnection();   
           /*  
            * 在实际编码中,这些环境变量应尽可能通过配置文件读取  
            */  
           //LDAP服务地址   
           singleton.sLDAP_URL = "ldap://localhost:8389";    
           //管理员账号   
        singleton.sMANAGER_DN = "uid=linly,ou=People,dc=jsoso,dc=net";   
        //管理员密码   
        singleton.sMANAGER_PASSWORD = "coffee";   
        //认证类型   
        singleton.sAUTH_TYPE = "simple";   
        //JNDI Context工厂类   
        singleton.sCONTEXT_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";    
           
        singleton.envProps.setProperty(Context.INITIAL_CONTEXT_FACTORY, singleton.sCONTEXT_FACTORY);   
        singleton.envProps.setProperty(Context.PROVIDER_URL, singleton.sLDAP_URL);   
        singleton.envProps.setProperty(Context.SECURITY_AUTHENTICATION, singleton.sAUTH_TYPE);   
        singleton.envProps.setProperty(Context.SECURITY_PRINCIPAL, singleton.sMANAGER_DN);   
        singleton.envProps.setProperty(Context.SECURITY_CREDENTIALS, singleton.sMANAGER_PASSWORD);   
        /*  
         * 绑定ldap服务器  
         */  
        singleton.dirCtx = new InitialDirContext(singleton.envProps);   
    }   
}  </span>


  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 下面是在CentOS 7上配置Apache服务器通过LDAP进行用户认证的步骤: 1. 安装Apache和mod_authnz_ldap模块: ``` sudo yum install httpd mod_authnz_ldap ``` 2. 修改Apache配置文件,启用LDAP模块: ``` sudo vim /etc/httpd/conf/httpd.conf ``` 找到以下行并取消注释(去掉前面的#): ``` LoadModule authnz_ldap_module modules/mod_authnz_ldap.so ``` 3. 配置LDAP连接信息: 在Apache的配置文件中添加以下内容: ``` LDAPTrustedGlobalCert CA_BASE64 /etc/pki/tls/certs/ca-bundle.crt LDAPVerifyServerCert off <Location /secure> AuthType Basic AuthName "LDAP Authentication" AuthBasicProvider ldap AuthLDAPURL "ldap://ldap.example.com:389/dc=example,dc=com?cn" AuthLDAPBindDN "cn=admin,dc=example,dc=com" AuthLDAPBindPassword "password" Require valid-user </Location> ``` 说明: - `LDAPTrustedGlobalCert`:指定SSL/TLS连接时使用的证书。 - `LDAPVerifyServerCert`:是否验证LDAP服务器的证书。开启验证可以提高安全性,但需要正确配置证书。 - `Location`:指定需要进行LDAP认证的URL路径。 - `AuthType`:指定认证类型为Basic。 - `AuthName`:指定认证名称。 - `AuthBasicProvider`:指定使用LDAP进行认证。 - `AuthLDAPURL`:指定LDAP服务器的地址和搜索条件。 - `AuthLDAPBindDN`:LDAP服务器的管理员账号。 - `AuthLDAPBindPassword`:LDAP服务器的管理员密码。 - `Require`:指定需要认证的用户。 4. 重启Apache服务器: ``` sudo systemctl restart httpd ``` 现在,您可以通过访问配置的URL路径来进行LDAP认证。如果认证成功,用户将可以访问受保护的内容。 ### 回答2: 在CentOS 7上配置Apache服务器通过LDAP进行用户认证需要以下步骤: 1. 安装和配置LDAP服务器:首先,需要安装和配置一个LDAP服务器,例如OpenLDAP。你可以使用以下命令安装OpenLDAP: sudo yum install openldap-servers openldap-clients 安装完成后,你需要配置LDAP服务器的基本设置,并创建一个LDAP用户和组。 2. 配置Apache服务器:在安装和配置LDAP服务器后,你需要在Apache服务器上进行一些配置。你可以使用以下命令安装Apache服务器: sudo yum install httpd 安装完成后,在Apache的配置文件`httpd.conf`中进行一些设置。你需要启用LDAP模块并指定LDAP服务器的地址和端口。例如: LoadModule authnz_ldap_module modules/mod_authnz_ldap.so <Location "/"> AuthName "LDAP Authentication" AuthType Basic AuthBasicProvider ldap AuthLDAPURL "ldap://ldap.example.com:389/dc=example,dc=com?uid?sub?(objectClass=*)" AuthLDAPBindDN "cn=admin,dc=example,dc=com" AuthLDAPBindPassword "password" Require valid-user </Location> 在以上配置中,你需要根据你实际的LDAP服务器地址和认证需求进行相应的修改。例如,`ldap.example.com`是LDAP服务器的域名,`dc=example,dc=com`是LDAP服务器的根目录,`AuthLDAPBindDN`是一个具有读取LDAP目录的管理员账号。 3. 重启Apache服务器:在完成以上配置后,你需要重启Apache服务器使其生效。你可以使用以下命令重启服务器: sudo systemctl restart httpd 注意确保没有任何错误信息。 4. 进行LDAP用户认证:现在你可以通过访问Apache服务器来进行LDAP用户认证。当访问需要认证的网页时,你将被提示输入用户名和密码。这些用户信息将会与LDAP服务器进行比对,如果认证成功,则可以访问受限资源。 通过以上步骤,在CentOS 7上配置Apache服务器通过LDAP进行用户认证。请确保设置正确并保护好服务器和LDAP的凭证,以确保安全性。 ### 回答3: 在CentOS 7上配置Apache服务器通过LDAP进行用户认证,需要以下步骤: 1. 安装Apache服务器:在CentOS 7上安装Apache服务器,可以使用以下命令: ``` sudo yum install httpd ``` 2. 配置LDAP模块:安装LDAP模块以启用用户认证功能。使用以下命令安装LDAP模块: ``` sudo yum install mod_ldap ``` 3. 配置LDAP服务器信息:在Apache配置文件中,找到`httpd.conf`文件并打开进行编辑。添加以下内容来配置LDAP服务器信息: ``` LDAPTrustedGlobalCert CERT_BASE64 /etc/ssl/certs/ca-certificates.crt LDAPVerifyServerCert on <Location "/"> AuthType Basic AuthName "LDAP Authentication" AuthBasicProvider ldap AuthLDAPURL ldap://ldap.example.com/o=example?uid AuthLDAPBindDN "cn=admin,dc=example,dc=com" AuthLDAPBindPassword "password" Require valid-user </Location> ``` 4. 重启Apache服务器:保存配置文件并重启Apache服务器使其生效。使用以下命令重启Apache服务器: ``` sudo systemctl restart httpd ``` 以上是在CentOS 7上配置Apache服务器通过LDAP进行用户认证的步骤。请根据你的LDAP服务器信息和需求进行相应的配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值