我必须实现一个基于 Spring 的 Web 应用程序,允许用户管理 LDAP 数据。到 LDAP 的连接只能通过 JNDI 框架完成(不允许 SpringLDAP)。
为此,我实现了一个实用程序类来执行基本操作(添加、更新、删除、列表……)。
这是该类的一小段代码:
public class LdapUtility {
private static LdapUtility instance;
private DirContext dirContext;
public static LdapUtility getInstance() {
if(LdapUtility.instance == null)
LdapUtility.instance = new LdapUtility();
return LdapUtility.instance;
}
/**
* Connect to the LDAP
*/
private LdapUtility() {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=Manager,dc=my-domain,dc=com");
env.put(Context.SECURITY_CREDENTIALS, "secret");
try {
dirContext = new InitialDirContext(env);
}
catch(Exception ex) {
dirContext = null;
}
}
public void addUser(User u) {
dirContext.createSubcontext(....); //add user in the LDAP
}
}
使用此代码,我可以通过调用来访问我的所有方法LdapUtility.getInstance()...
,但与 LDAP 的连接永远不会被释放。
另一种方法是在每次操作之前连接到 LDAP,但在这种情况下,与 LDAP 的连接会太多......
所以,这是我的问题:访问这些方法的最优雅/最智能的方式是什么?
先感谢您 :-)