我必須實現一個基於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