封装JNDI操作LDAP服务器的工具类2

  1. package com.common.ldapconnection;    
  2.   
  3. import java.util.Properties;    
  4. import javax.naming.Context;    
  5. import javax.naming.NamingException;    
  6. import javax.naming.directory.DirContext;    
  7. import javax.naming.directory.InitialDirContext;    
  8. import org.apache.log4j.Logger;    
  9. import org.apache.commons.lang.StringUtils;    
  10.   
  11. /**   
  12.  * 功能描述:ldap连接工厂,提供初始化ldap连接的方法。   
  13.  * @author liaowufeng   
  14.  * @version 1.0   
  15.  */    
  16. public class LdapConnectionFactory {    
  17.     // 初始化日志处理类    
  18.     static Logger log = Logger.getLogger(LdapConnectionFactory.class.getName());    
  19.   
  20.     /**   
  21.     *  构造函数私有,防止实例化   
  22.     */    
  23.     private LdapConnectionFactory() {    
  24.     }    
  25.   
  26.     /**   
  27.      * 从LDAP连接池中取得一个连接   
  28.      * @param poolName String 连接池名   
  29.      * @env   连接LDAP的连接信息   
  30.      * @return DirContext    
  31.      */    
  32.     public static DirContext getDirContext(String poolName,Env env) {    
  33.         // 取得Context    
  34.         try {    
  35.           // 日志打印,表明进入此方法    
  36.           log.debug(Constants.INTOMETHOD + "getDirContext");    
  37.           // 初始化Properties对象    
  38.           Properties mEnv = new Properties();    
  39.           // 使用LDAP/AD的认证方式    
  40.           mEnv.put(Context.AUTHORITATIVE, "true");    
  41.           // 使用连接池    
  42.           mEnv.put("com.sun.jndi.ldap.connect.pool""true");    
  43.           // 设定LDAP/AD的连接工厂    
  44.           mEnv.put(Context.INITIAL_CONTEXT_FACTORY, env.factory);    
  45.           // 设定LDAP/AD的url地址    
  46.           mEnv.put(Context.PROVIDER_URL, env.url);    
  47.           // 设定连接TimeOut    
  48.           if(!StringUtils.isEmpty(env.timeOut)) {    
  49.               mEnv.put("com.sun.jndi.ldap.connect.timeout", env.timeOut);    
  50.           }    
  51.           // 设定安全模式为simple方式    
  52.           mEnv.put(Context.SECURITY_AUTHENTICATION, "simple");    
  53.           // ssl通道访问    
  54.           if (env != null && "ssl".equals(env.securityProtocol)) {    
  55.               // 设定访问协议为ssl    
  56.               mEnv.put(Context.SECURITY_PROTOCOL, env.securityProtocol);    
  57.               // 设置访问证书属性,若没有此证书将无法通过ssl访问AD    
  58.               System.setProperty("javax.net.ssl.trustStore",    
  59.                                  env.sslTrustStore);    
  60.           }    
  61.           // 读取可以登陆ldap的帐号、密码    
  62.           mEnv.put(Context.SECURITY_PRINCIPAL, env.adminUID);    
  63.           mEnv.put(Context.SECURITY_CREDENTIALS, env.adminPWD);    
  64.   
  65.           log.debug(Constants.INIT + "DirContext");    
  66.           // 通过参数连接LDAP/AD    
  67.           DirContext ctx = new InitialDirContext(mEnv);    
  68.           log.debug("LdapConnectionFactory:" + Constants.INIT + "DirContext" +    
  69.                     Constants.SUCCESS);    
  70.           return ctx;    
  71.   
  72.       }    
  73.       catch (NamingException ex) {    
  74.           ex.printStackTrace();    
  75.           log.error("LdapConnectionFactory:" + Constants.INIT + "DirContext" +    
  76.                     Constants.FAIL);    
  77.           log.error(ex.getMessage());    
  78.           return null;    
  79.       }    
  80.     }    
  81.   
  82.     /**   
  83.      * 关闭LDAP连接   
  84.      * @param dirContext DirContext 已连接的LDAP的Context实例   
  85.      */    
  86.     public static void closeDirContext(DirContext dirContext) {    
  87.         try {    
  88.             if (dirContext != null)    
  89.                dirContext.close();    
  90.         }    
  91.         catch (Exception ex) {    
  92.             ex.printStackTrace();    
  93.             log.error("not close DirContext");    
  94.         }    
  95.     }    
  96.   
  97.   
  98.     /**   
  99.      * 获取 LDAP 服务器连接的方法   
  100.      * @param env 连接LDAP的连接信息   
  101.      * @return DirContext - LDAP server的连接   
  102.      */    
  103.     public static DirContext getDirContext(Env env) {    
  104.         try {    
  105.             // 初始化Properties对象    
  106.             Properties mEnv = new Properties();    
  107.             // 使用LDAP/AD的认证方式    
  108.             mEnv.put(Context.AUTHORITATIVE, "true");    
  109.             // 设定LDAP/AD的连接工厂    
  110.             mEnv.put(Context.INITIAL_CONTEXT_FACTORY, env.factory);    
  111.             // 设定LDAP/AD的url地址    
  112.             mEnv.put(Context.PROVIDER_URL, env.url);    
  113.             // 设定连接TimeOut    
  114.             if (!StringUtils.isEmpty(env.timeOut)) {    
  115.                 mEnv.put("com.sun.jndi.ldap.connect.timeout", env.timeOut);    
  116.             }    
  117.             // 设定安全模式为simple方式    
  118.             mEnv.put(Context.SECURITY_AUTHENTICATION, "simple");    
  119.             // ssl通道访问    
  120.             if (env != null && "ssl".equals(env.securityProtocol)) {    
  121.                 // 设定访问协议为ssl    
  122.                 mEnv.put(Context.SECURITY_PROTOCOL, env.securityProtocol);    
  123.                 // 设置访问证书属性,若没有此证书将无法通过ssl访问AD    
  124.                 System.setProperty("javax.net.ssl.trustStore",    
  125.                                    env.sslTrustStore);    
  126.             }    
  127.             // 读取可以登陆ldap的帐号、密码    
  128.             mEnv.put(Context.SECURITY_PRINCIPAL, env.adminUID);    
  129.             mEnv.put(Context.SECURITY_CREDENTIALS, env.adminPWD);    
  130.   
  131.             log.debug(Constants.INIT + "DirContext");    
  132.             // 通过参数连接LDAP/AD    
  133.             DirContext ctx = new InitialDirContext(mEnv);    
  134.             log.debug("LdapConnectionFactory:" + Constants.INIT + "DirContext" +    
  135.                       Constants.SUCCESS);    
  136.             return ctx;    
  137.   
  138.         }    
  139.         catch (NamingException ex) {    
  140.             ex.printStackTrace();    
  141.             log.error("LdapConnectionFactory:" + Constants.INIT + "DirContext" +    
  142.                       Constants.FAIL);    
  143.             log.error(ex.getMessage());    
  144.             return null;    
  145.         }    
  146.     }    
  147. }   

转载于:https://www.cnblogs.com/kungfupanda/archive/2011/02/21/1959932.html

你可能感兴趣的:(封装JNDI操作LDAP服务器的工具类2)