gpt4 book ai didi

java - 我怎样才能检查给定的用户名是否存在?

转载 作者:搜寻专家 更新时间:2023-10-31 20:22:56 24 4
gpt4 key购买 nike

我有一个同时使用 LDAP 和简单数据库身份验证来登录用户的应用程序。只有当用户不存在于 LDAP 上下文中时,应用程序才会检查他是否存在于数据库中。所以我需要一种方法来检查用户是否存在于 LDAP 中,而无需知道密码。我提到用户名是唯一的。

我使用此代码,如果我有正确的用户名和密码,它就可以使用。如果密码或用户名错误,我会得到一个异常(exception)。如果我能得到不同的异常,那将是理想的,一种是用户名不存在,另一种是提供的密码错误。

    String username = "test";
String password = "pass";
Hashtable<String, String> environment = new Hashtable<String, String>();
environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
environment.put(Context.PROVIDER_URL, "ldap://server.example.com:389");
environment.put(Context.SECURITY_AUTHENTICATION, "simple");
String user = username + "@example.com";
environment.put(Context.SECURITY_PRINCIPAL, user );
environment.put(Context.SECURITY_CREDENTIALS, password);
try
{
DirContext context = new InitialDirContext(environment);

String searchBase = "DC=server,DC=example,DC=COM";
String FILTER = "(&(objectClass=user)(objectCategory=person)((sAMAccountName=" + username + ")))";
SearchControls ctls = new SearchControls();
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<SearchResult> answer = context.search(searchBase, FILTER, ctls);
SearchResult result = answer.next();
Attribute email = result.getAttributes().get("mail");
Attribute cn = result.getAttributes().get("cn");
System.out.println(cn + " : " + email);
context.close();
}
catch (AuthenticationException a)
{
Logger.getLogger().info("Authentication failed: " + a.getExplanation());

}
catch (NamingException e)
{
Logger.getLogger().info("Failed to bind to LDAP: " + e.getExplanation());
}

最佳答案

您正在 LDAP 中搜索用户,仅使用他的用户名。但是要向 LDAP 进行身份验证,您需要使用搜索到的用户名和他的密码。

只需使用另一个(管理员)用户和密码进行身份验证,如果对用户的搜索返回某些内容,则返回 true。

关于java - 我怎样才能检查给定的用户名是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7595394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com