use*_*267 5 java connection ldap
目前从java我用以下代码连接到LDAP,非常典型的例子:
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, url);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, user);
env.put(Context.SECURITY_CREDENTIALS, password);
LdapContext ctx = null;
try
{
ctx = new InitialLdapContext(env, null);
return true;
}
catch (NamingException ex)
{
return false;
}
finally
{
if (ctx != null)
{
try {
ctx.close();
} catch (NamingException e) {
log.warn(e.getMessage());
}
}
}
Run Code Online (Sandbox Code Playgroud)
这在验证用户方面起作用.但是LDAP管理员告诉我,当绑定不成功时,我没有正常断开连接.LDAP端的错误是(例如):
[24/Jan/2013:13:20:44 -0500] conn = 249 op = -1 msgId = -1 - 从[ipaddress]关闭:44724 - A1 - 客户端中止连接 -
他还说,当验证成功时,断开连接是优雅的.我想这是因为我ctx.close()在那种情况下做的.
但是,当身份验证失败时,实际上会从该new InitialLdapContext(env, null)行抛出异常.因此,不返回任何上下文,并且不会在任何上下文中调用close.
在尝试身份验证之前,是否有某种方法可以检索某种连接对象,以便我可以在以后关闭它,无论auth是否成功?
为什么他要在意优雅和不优雅的结束呢?显然,您的关闭是在唯一相关的情况下执行的:您成功的情况。在另一种情况下,没有任何内容可以关闭,因此您无法调用任何内容。JNDI LDAP 提供程序在另一种情况下将其关闭,显然是它正在执行中止关闭。这一切都在 JNDI LDAP 提供程序的幕后进行。你对此无能为力。我建议他找一些其他真正重要的事情来担心。
| 归档时间: |
|
| 查看次数: |
2638 次 |
| 最近记录: |