0

为什么这行得通?

env.put(Context.PROVIDER_URL, "ldap://localhost:10389/o=csRepository");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
//env.put(Context.SECURITY_PRINCIPAL, "cn=John Eipe, ou=employees, o=csRepository");
//env.put(Context.SECURITY_CREDENTIALS, "qwer1234");

DirContext ctx = new InitialDirContext(env);
//operations on ctx

我的理解是,当 SECURITY_AUTHENTICATION 被指定为简单并且没有指定用户名或密码时,它应该抛出 javax.naming.AuthenticationException。

4

1 回答 1

2

解决了。可悲的是,它就是这样工作的。在 Oracle 文档中如下所述。

如果您向 Context.SECURITY_CREDENTIALS 环境属性提供空字符串、空字节/字符数组或 null,则身份验证机制将为“无”。这是因为 LDAP 要求密码为非空以进行简单身份验证。如果未提供密码,协议会自动将身份验证转换为“无”。

这会导致严重的安全漏洞。但是,我想它留给应用程序来验证。

于 2014-04-05T16:02:33.477 回答