为什么这样做?
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被指定为simple并且没有指定用户名或密码时,它应该抛出javax.naming.AuthenticationException。
答案 0 :(得分:1)
解决。可悲的是,它是如何工作的。 它在Oracle文档中声明如下。
如果提供空字符串,空字节/ char数组或null Context.SECURITY_CREDENTIALS环境属性,然后是 认证机制将是“无”。这是因为LDAP 要求密码对于简单身份验证是非空的。该 如果是,协议会自动将身份验证转换为“无” 密码不提供。
这会导致严重的安全漏洞。但是,我想由应用程序进行验证。