Java JNDI LDAP在同一InitialDirContext对象中创建2个连接

Java JNDI LDAP在同一InitialDirContext对象中创建2个连接,java,jakarta-ee,jndi,Java,Jakarta Ee,Jndi,我需要创建一个ldap连接(我使用一个应用程序帐户),并从这个连接中创建其他连接(用户连接),检查uid和密码是否正确 Properties env = new Properties(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, ldapServerUrl); env.put(Context.SECURITY_AUTHEN

我需要创建一个ldap连接(我使用一个应用程序帐户),并从这个连接中创建其他连接(用户连接),检查uid和密码是否正确

Properties env = new Properties();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, ldapServerUrl);
env.put(Context.SECURITY_AUTHENTICATION, "none");

SearchControls searchCtrls = new SearchControls();
searchCtrls.setReturningAttributes(new String[] {});
searchCtrls.setSearchScope(SearchControls.SUBTREE_SCOPE);

String filter = "(&(cn=" + identifier + "))";

DirContext ctx = null;
ctx = new InitialDirContext(env);
NamingEnumeration<SearchResult> answer = ctx.search(
   ldapBaseDN, filter, searchCtrls);

String fullDN = null;
if (answer.hasMore()) {
    fullDN = answer.next().getNameInNamespace();

    ctx.close();
    ctx = null;

    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL, fullDN);
    env.put(Context.SECURITY_CREDENTIALS, password);

    ctx = new InitialDirContext(env);
    // here I must create the user connection for check if the uid and password is good.

    return true;
}
Properties env=新属性();
put(Context.INITIAL\u Context\u工厂,“com.sun.jndi.ldap.LdapCtxFactory”);
env.put(Context.PROVIDER_URL,ldapServerUrl);
环境put(Context.SECURITY_身份验证,“无”);
SearchControls searchCtrls=新的SearchControls();
searchCtrls.setReturningAttribute(新字符串[]{});
searchCtrls.setSearchScope(SearchControls.SUBTREE_范围);
字符串筛选器=“(&(cn=“+identifier+”)”;
DirContext ctx=null;
ctx=新的初始目录上下文(env);
NamingEnumeration答案=ctx.search(
ldapBaseDN、筛选器、searchCtrls);
字符串fullDN=null;
if(answer.hasMore()){
fullDN=answer.next().getNameInNamespace();
ctx.close();
ctx=null;
环境put(Context.SECURITY_认证,“simple”);
环境put(Context.SECURITY\u PRINCIPAL,fullDN);
环境放置(Context.SECURITY\u凭证、密码);
ctx=新的初始目录上下文(env);
//在这里,我必须创建用户连接以检查uid和密码是否正确。
返回true;
}

谢谢。

在LDAP DIT中找到用户后,应修改环境以包含用户的DN和密码,然后使用相同的
上下文发布

您不需要创建单独的“物理”连接