我必须实现一个基于Spring的Web应用程序,允许用户管理LDAP数据。与LDAP的连接只能使用JNDI框架完成(不允许使用SpringLDAP)。从Spring连接LDAP
为此,我实现了一个工具类来完成基本操作(添加,更新,删除,列表...)。
下面是这个类的代码短块:
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太多连接...
所以,这里是我的问题:什么是最优雅/最聪明的方式来访问这些方法?
预先感谢您:-)
问题不在于用于连接到ldap的方式。就我而言,我必须使用JNDI(这是一个类项目)。我的问题是如何从我的控制器访问我的班级方法,同时聪明地管理ldap连接。 – user1901206