首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JNDI 封裝 LDAP 操作工具類:連線工廠與統一操作介面實戰

     編輯:Java 相關知識

設計目標

使用者僅需熟悉 List、Map 資料結構,完全屏蔽 LDAP/JNDI 底層複雜性。

三大核心類別架構

  1. Env:封裝 LDAP 連線參數 (URL、認證資訊、SSL 設定、逾時等)
  2. LdapConnectionFactory:連線工廠,提供初始化與獲取 DirContext 方法,支援連線池
  3. LdapOperUtils:操作工具類,提供增刪改查、搜尋等高階業務方法(本文重點展示前兩類)

LdapConnectionFactory 核心原始碼解析

環境屬性組裝 (getDirContext 內部)

Properties mEnv = new Properties();
mEnv.put(Context.AUTHORITATIVE, "true");
mEnv.put("com.sun.jndi.ldap.connect.pool", "true"); // 啟用連線池
mEnv.put(Context.INITIAL_CONTEXT_FACTORY, env.factory);
mEnv.put(Context.PROVIDER_URL, env.url);
if (env.timeOut != null) mEnv.put("com.sun.jndi.ldap.connect.timeout", env.timeOut);
mEnv.put(Context.SECURITY_AUTHENTICATION, "simple");
mEnv.put(Context.SECURITY_PRINCIPAL, env.adminUID);
mEnv.put(Context.SECURITY_CREDENTIALS, env.adminPWD);

// SSL 支援
if ("ssl".equals(env.securityProtocol)) {
    mEnv.put(Context.SECURITY_PROTOCOL, "ssl");
    System.setProperty("javax.net.ssl.trustStore", env.sslTrustStore);
}

DirContext ctx = new InitialDirContext(mEnv);

兩種獲取連線方法

  • getDirContext(String poolName, Env env):帶連線池名稱(預留擴充)
  • getDirContext(Env env):簡化版

皆含完整日誌記錄(Log4j)與異常捕獲,失敗回傳 null 並記錄錯誤。

連線關閉

public static void closeDirContext(DirContext ctx) {
    if (ctx != null) try { ctx.close(); } catch (Exception e) { log.error("not close DirContext", e); }
}

關鍵設計亮點

  • 連線池原生支援:com.sun.jndi.ldap.connect.pool=true,效能大幅提升
  • SSL 完整配置:信任庫路徑外部化,支援安全通道
  • 逾時可配置:com.sun.jndi.ldap.connect.timeout
  • 工廠模式封裝:構造子私有化,靜態方法提供單一入口
  • 資源安全釋放:統一 closeDirContext 避免洩漏

Env 類別屬性速查

擴充建議:LdapOperUtils 應提供的高階方法

  • search(baseDN, filter, attributes) → List<Map<String,Object>>
  • add(entryDN, attributes)
  • modify(entryDN, modifications)
  • delete(entryDN)
  • authenticate(userDN, password) → boolean

所有方法內部自動從工廠獲取連線、操作完畢歸還連線、轉換 Attributes ↔ Map,呼叫端零 JNDI 依賴。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
屬性說明
factory初始化上下文工廠 (通常 com.sun.jndi.ldap.LdapCtxFactory)
urlLDAP 伺服器 URL (如 ldap://host:389 或 ldaps://host:636)
adminUID管理員 DN (如 cn=admin,dc=example,dc=com)
adminPWD管理員密碼
securityProtocolssl 或 null
sslTrustStoreSSL 信任庫路徑
timeOut連線逾時毫秒數 (字串格式)