【发布时间】:2013-01-05 14:13:16
【问题描述】:
我必须实现一个基于 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 的连接会太多...
所以,这是我的问题:访问这些方法的最优雅/最智能的方式是什么?
提前谢谢你:-)
【问题讨论】: