`
yang_min
  • 浏览: 339174 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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

阅读更多
package com.common.ldapconnection; 

import java.util.Properties; 
import javax.naming.Context; 
import javax.naming.NamingException; 
import javax.naming.directory.DirContext; 
import javax.naming.directory.InitialDirContext; 
import org.apache.log4j.Logger; 
import org.apache.commons.lang.StringUtils; 

/** 
 * 功能描述:ldap连接工厂,提供初始化ldap连接的方法。 
 * @author liaowufeng 
 * @version 1.0 
 */ 
public class LdapConnectionFactory { 
    // 初始化日志处理类 
    static Logger log = Logger.getLogger(LdapConnectionFactory.class.getName()); 

    /** 
    *  构造函数私有,防止实例化 
    */ 
    private LdapConnectionFactory() { 
    } 

    /** 
     * 从LDAP连接池中取得一个连接 
     * @param poolName String 连接池名 
     * @env   连接LDAP的连接信息 
     * @return DirContext  
     */ 
    public static DirContext getDirContext(String poolName,Env env) { 
        // 取得Context 
        try { 
          // 日志打印,表明进入此方法 
          log.debug(Constants.INTOMETHOD + "getDirContext"); 
          // 初始化Properties对象 
          Properties mEnv = new Properties(); 
          // 使用LDAP/AD的认证方式 
          mEnv.put(Context.AUTHORITATIVE, "true"); 
          // 使用连接池 
          mEnv.put("com.sun.jndi.ldap.connect.pool", "true"); 
          // 设定LDAP/AD的连接工厂 
          mEnv.put(Context.INITIAL_CONTEXT_FACTORY, env.factory); 
          // 设定LDAP/AD的url地址 
          mEnv.put(Context.PROVIDER_URL, env.url); 
          // 设定连接TimeOut 
          if(!StringUtils.isEmpty(env.timeOut)) { 
              mEnv.put("com.sun.jndi.ldap.connect.timeout", env.timeOut); 
          } 
          // 设定安全模式为simple方式 
          mEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); 
          // ssl通道访问 
          if (env != null && "ssl".equals(env.securityProtocol)) { 
              // 设定访问协议为ssl 
              mEnv.put(Context.SECURITY_PROTOCOL, env.securityProtocol); 
              // 设置访问证书属性,若没有此证书将无法通过ssl访问AD 
              System.setProperty("javax.net.ssl.trustStore", 
                                 env.sslTrustStore); 
          } 
          // 读取可以登陆ldap的帐号、密码 
          mEnv.put(Context.SECURITY_PRINCIPAL, env.adminUID); 
          mEnv.put(Context.SECURITY_CREDENTIALS, env.adminPWD); 

          log.debug(Constants.INIT + "DirContext"); 
          // 通过参数连接LDAP/AD 
          DirContext ctx = new InitialDirContext(mEnv); 
          log.debug("LdapConnectionFactory:" + Constants.INIT + "DirContext" + 
                    Constants.SUCCESS); 
          return ctx; 

      } 
      catch (NamingException ex) { 
          ex.printStackTrace(); 
          log.error("LdapConnectionFactory:" + Constants.INIT + "DirContext" + 
                    Constants.FAIL); 
          log.error(ex.getMessage()); 
          return null; 
      } 
    } 

    /** 
     * 关闭LDAP连接 
     * @param dirContext DirContext 已连接的LDAP的Context实例 
     */ 
    public static void closeDirContext(DirContext dirContext) { 
        try { 
            if (dirContext != null) 
               dirContext.close(); 
        } 
        catch (Exception ex) { 
            ex.printStackTrace(); 
            log.error("not close DirContext"); 
        } 
    } 


    /** 
     * 获取 LDAP 服务器连接的方法 
     * @param env 连接LDAP的连接信息 
     * @return DirContext - LDAP server的连接 
     */ 
    public static DirContext getDirContext(Env env) { 
        try { 
            // 初始化Properties对象 
            Properties mEnv = new Properties(); 
            // 使用LDAP/AD的认证方式 
            mEnv.put(Context.AUTHORITATIVE, "true"); 
            // 设定LDAP/AD的连接工厂 
            mEnv.put(Context.INITIAL_CONTEXT_FACTORY, env.factory); 
            // 设定LDAP/AD的url地址 
            mEnv.put(Context.PROVIDER_URL, env.url); 
            // 设定连接TimeOut 
            if (!StringUtils.isEmpty(env.timeOut)) { 
                mEnv.put("com.sun.jndi.ldap.connect.timeout", env.timeOut); 
            } 
            // 设定安全模式为simple方式 
            mEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); 
            // ssl通道访问 
            if (env != null && "ssl".equals(env.securityProtocol)) { 
                // 设定访问协议为ssl 
                mEnv.put(Context.SECURITY_PROTOCOL, env.securityProtocol); 
                // 设置访问证书属性,若没有此证书将无法通过ssl访问AD 
                System.setProperty("javax.net.ssl.trustStore", 
                                   env.sslTrustStore); 
            } 
            // 读取可以登陆ldap的帐号、密码 
            mEnv.put(Context.SECURITY_PRINCIPAL, env.adminUID); 
            mEnv.put(Context.SECURITY_CREDENTIALS, env.adminPWD); 

            log.debug(Constants.INIT + "DirContext"); 
            // 通过参数连接LDAP/AD 
            DirContext ctx = new InitialDirContext(mEnv); 
            log.debug("LdapConnectionFactory:" + Constants.INIT + "DirContext" + 
                      Constants.SUCCESS); 
            return ctx; 

        } 
        catch (NamingException ex) { 
            ex.printStackTrace(); 
            log.error("LdapConnectionFactory:" + Constants.INIT + "DirContext" + 
                      Constants.FAIL); 
            log.error(ex.getMessage()); 
            return null; 
        } 
    } 
} 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics