使用者僅需熟悉 List、Map 資料結構,完全屏蔽 LDAP/JNDI 底層複雜性。
DirContext 方法,支援連線池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,效能大幅提升com.sun.jndi.ldap.connect.timeoutcloseDirContext 避免洩漏| 屬性 | 說明 |
|---|---|
| factory | 初始化上下文工廠 (通常 com.sun.jndi.ldap.LdapCtxFactory) |
| url | LDAP 伺服器 URL (如 ldap://host:389 或 ldaps://host:636) |
| adminUID | 管理員 DN (如 cn=admin,dc=example,dc=com) |
| adminPWD | 管理員密碼 |
| securityProtocol | ssl 或 null |
| sslTrustStore | SSL 信任庫路徑 |
| timeOut | 連線逾時毫秒數 (字串格式) |