我为我的组织使用Servlet和JSP创建了一个简单的Java Web应用程序,其中需要包含LDAP身份验证。拥有我组织的有效ID的任何人都应该能够访问该Web应用程序。尝试了许多谷歌的例子,但无法实现这一目标。
请提供任何源代码以轻松实现此目的。
虽然凭据有效,但始终获得以下异常。
javax.naming.AuthenticationException: [LDAP: error code 49 - Invalid Credentials]
我的代码中的代码段
public static boolean authenticateJndi(String username, String password) throws Exception{
Properties props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
props.put(Context.PROVIDER_URL, "ldap://URL");
props.put(Context.SECURITY_PRINCIPAL, "uid=admin,ou=system,o=example.com");//adminuser - User with special priviledge, dn user
props.put(Context.SECURITY_CREDENTIALS, "password");//dn user password
InitialDirContext context = new InitialDirContext(props);
SearchControls ctrls = new SearchControls();
ctrls.setReturningAttributes(new String[] { "givenName", "sn","memberOf" });
ctrls.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<javax.naming.directory.SearchResult> answers = context.search("o=example.com", "(uid=" + username + ")", ctrls);
javax.naming.directory.SearchResult result = answers.nextElement();
String user = result.getNameInNamespace();
try {
props = new Properties();
props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
props.put(Context.PROVIDER_URL, "ldap://LDAPSERVER:PORT");
props.put(Context.SECURITY_PRINCIPAL, user);
props.put(Context.SECURITY_CREDENTIALS, password);
context = new InitialDirContext(props);
} catch (Exception e) {
return false;
}
return true;
}