JAVA连接LDAP(Windows AD)验证时,密码为空验证通过的问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA连接LDAP(Windows AD)验证时,密码为空验证通过的问题?相关的知识,希望对你有一定的参考价值。

网上找到LDAP用户密码验证的方法,输入正确的密码验证通过,错误的密码便会验证失败,这是符合要求的,但是当密码我给空字符串(“”)的时候竟然也能验证通过,请问原因是什么? 我想实现的是密码必须匹配才验证通过,空串跟真正密码不等需要返回验证失败的结果,请问该如何修改,谢谢大家~~
补充:不能通过首先判断password.equals(""),因为我们的应用程序中密码是可以为空的,完全靠LDAP来验证空串跟密码是否匹配就可以。
public boolean validateUserForAD(String username,String password)
String host = "172.16.10.190";
String port = "389";
String domain = "domain200";

Hashtable env = new Hashtable();
DirContext ctx;

String user = domain + "\\" + username;
String passwd = password;

env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, user);
env.put(Context.SECURITY_CREDENTIALS, passwd);

String url = new String("ldap://" + host + ":" + port);
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");

env.put(Context.PROVIDER_URL, url);

try
ctx = new InitialDirContext(env);
ctx.close();
System.out.println("验证成功!");
return true;
catch (NamingException err)
err.printStackTrace();
System.out.println("验证失败!");
return false;



请大家注意我上面的补充,谢谢~·

参考技术A 密码为空 ,实际值是null

任何值与null比较时,记得返回值都是true,

故在程序里需要预先把空值过滤掉

if(pwd==null)
System.out.println("输入密码为空,验证不通过!");
参考技术B String passwd;
if("".equals(password.trim()))
passwd = null;
本回答被提问者采纳
参考技术C 匹配问题 可以针对空字符串的情况特殊处理。 参考技术D 在String passwd=password;加入判断
if(passwd.trim().equals(""))
System.out.println("验证失败");
return false;

尝试进行用户名查找时收到特定的AD ldap错误

我正在尝试在我的活动目录上进行用户名查找,即使我使用正确的凭据,我仍然会收到此错误。我甚至验证我能够连接到ldap,但我无法进行身份验证以进行查找。

[LDAP:错误代码49 - 8009030C:LdapErr:DSID-0C09042A,注释:AcceptSecurityContext错误,数据2030,v3839];嵌套异常是javax.naming.AuthenticationException:[LDAP:错误代码49 - 8009030C:LdapErr:DSID-0C09042A,注释:AcceptSecurityContext错误,数据2030,v3839]

甚至尝试创建一个新的用户帐户,但仍然不会使用它进行身份验证。

答案

首先,show how you are doing绑定。 (比如代码)

你确定你有适当的权限吗?

一般来说,响应就像:(从我发现的内容)

LDAP:错误代码49 - 是标准的LDAP Result Code

数据2030 - 通常(当错误代码49)这是一个server provided Client Bind Error然而我在旅行中没有看到2030。

无论提供的凭据无效或某些帐户限制阻止绑定完成。

我建议您使用一些“已知”应用程序执行LDAP绑定。 (我喜欢Apache Studio)

以上是关于JAVA连接LDAP(Windows AD)验证时,密码为空验证通过的问题?的主要内容,如果未能解决你的问题,请参考以下文章

使用java连接AD域,验证账号密码是否正确

jumpserver配置ldap集成windows AD认证

JAVA使用Ldap操作AD域

尝试进行用户名查找时收到特定的AD ldap错误

尝试进行用户名查找时收到特定的 AD ldap 错误

freeradius 3.0使用ldap bind windows ad 来认证用户