try{ SearchControls constraints = new SearchControls(); constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); NamingEnumeration en = ctx.search("", "mail="+email, constraints); //The UID you are going to query,* means all nodes if(en == null){ System.out.println("Have no NamingEnumeration."); } if(!en.hasMoreElements()){ System.out.println("Have no element."); } while (en != null && en.hasMoreElements()){//maybe more than one element Object obj = en.nextElement(); if(obj instanceof SearchResult){ SearchResult si = (SearchResult) obj; userDN += si.getName(); userDN += "," + BASEDN; } else{ System.out.println(obj); } System.out.println(); } }catch(Exception e){ System.out.println("Exception in search():"+e); }
private static long interval = 0x186a0L; //refresh per 100 second // static Class class$0; /* synthetic field */
public UMParas() { }
//input an para and return the result public static synchronized String getPara(String paras) throws IllegalArgumentException { if (paras == null || paras.trim().length() == 0) throw new IllegalArgumentException("Parameter's value invalid."); long currentTime = System.currentTimeMillis(); if (prop == null || currentTime - lastLoadTime > interval) reloadDom(); Object obj = prop.get(paras); if (obj != null) return (String) obj; else return null; }
//load the xml file private static synchronized void reloadDom() { if (prop == null) prop = new HashMap(); SAXBuilder builder = new SAXBuilder(); Document read_doc = null; try { read_doc = builder.build(UMParas.class .getResource("ldapconfig.xml")); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Element rootElement = read_doc.getRootElement(); List list = rootElement.getChildren("para"); for (Iterator i = list.iterator(); i.hasNext();) { Element current = (Element) i.next(); List item = current.getChildren("item"); Attribute code; Attribute value; for (Iterator j = item.iterator(); j.hasNext(); prop.put(code .getValue(), value.getValue())) { Element init = (Element) j.next(); code = init.getAttribute("code"); value = init.getAttribute("value"); }
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.Control;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;public class UserAuthenticate {
private String URL = "ldap://localhost:389/";
private String BASEDN = "ou=catalogue,o=test.com";
private String FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
private LdapContext ctx = null;
private Hashtable env = null;
private Control[] connCtls = null;
private void LDAP_connect(){
env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,FACTORY);
env.put(Context.PROVIDER_URL, URL+BASEDN);//LDAP server
env.put(Context.SECURITY_AUTHENTICATION, "simple");
//此处若不指定用户名和密码,则自动转换为匿名登录
try{
ctx = new InitialLdapContext(env,connCtls);
}catch(javax.naming.AuthenticationException e){
System.out.println("Authentication faild: "+e.toString());
}catch(Exception e){
System.out.println("Something wrong while authenticating: "+e.toString());
}
}
private String getUserDN(String email){
String userDN = "";
LDAP_connect();
try{
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration en = ctx.search("", "mail="+email, constraints); //The UID you are going to query,* means all nodes
if(en == null){
System.out.println("Have no NamingEnumeration.");
}
if(!en.hasMoreElements()){
System.out.println("Have no element.");
}
while (en != null && en.hasMoreElements()){//maybe more than one element
Object obj = en.nextElement();
if(obj instanceof SearchResult){
SearchResult si = (SearchResult) obj;
userDN += si.getName();
userDN += "," + BASEDN;
}
else{
System.out.println(obj);
}
System.out.println();
}
}catch(Exception e){
System.out.println("Exception in search():"+e);
}
return userDN;
}
public boolean authenricate(String ID,String password){
boolean valide = false;
String userDN = getUserDN(ID);
try {
ctx.addToEnvironment(Context.SECURITY_PRINCIPAL,userDN);
ctx.addToEnvironment(Context.SECURITY_CREDENTIALS,password);
ctx.reconnect(connCtls);
System.out.println(userDN + " is authenticated");
valide = true;
}catch (AuthenticationException e) {
System.out.println(userDN + " is not authenticated");
System.out.println(e.toString());
valide = false;
}catch (NamingException e) {
System.out.println(userDN + " is not authenticated");
valide = false;
}
return valide;
}
}
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.Control;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;public class UserAuthenticate {
private String URL = "ldap://ssuzdc3:389/";
private String BASEDN = "OU=Local Profile,OU=Users,OU=Suzhou,DC=xxxx,DC=com";
private String FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
private LdapContext ctx = null;
private Hashtable env = null;
private Control[] connCtls = null; private void LDAP_connect() {
env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, FACTORY);
env.put(Context.PROVIDER_URL, URL + BASEDN);
env.put(Context.SECURITY_AUTHENTICATION, "simple"); try {
ctx = new InitialLdapContext(env, connCtls);
} catch (javax.naming.AuthenticationException e) {
System.out.println("Authentication faild: " + e.toString());
} catch (Exception e) {
System.out.println("Something wrong while authenticating: "
+ e.toString());
}
} private String getUserDN(String email) {
String userDN = ""; LDAP_connect(); try {
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration en = ctx.search("", "mail=" + email, constraints);
if (en == null) {
System.out.println("No NamingEnumeration.");
}
if (!en.hasMoreElements()) {
System.out.println("No element.");
}
while (en != null && en.hasMoreElements()) {
Object obj = en.nextElement();
if (obj instanceof SearchResult) {
SearchResult si = (SearchResult) obj;
userDN += si.getName();
userDN += "," + BASEDN;
} else {
System.out.println(obj);
}
System.out.println();
}
} catch (Exception e) {
System.out.println("Exception in search():" + e);
e.printStackTrace();
} return userDN;
} public boolean authenricate(String ID, String password) {
boolean valide = false;
String userDN = getUserDN(ID);
try {
ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, userDN);
ctx.addToEnvironment(Context.SECURITY_CREDENTIALS, password);
ctx.reconnect(connCtls);
System.out.println(userDN + " is authenticated");
valide = true;
} catch (AuthenticationException e) {
System.out.println(userDN + " is not authenticated");
System.out.println(e.toString());
valide = false;
} catch (NamingException e) {
System.out.println(userDN + " is not authenticated");
valide = false;
} catch (Exception e) {
e.printStackTrace();
} return valide;
} public static void main(String[] args) {
boolean bResult = new UserAuthenticate().authenricate(
"[email protected]", "mypassword");
}
}
package ldap2;
import java.util.Hashtable;
import javax.naming.AuthenticationException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
public class LDAP {
private Hashtable env = null;
private DirContext ctx = null;
private boolean islogin = false;
StringBuffer url;
String host;
String port;
String admin;
String password;
String baseDN;
public LDAP(String id, String pwd) {
try {
host = UMParas.getPara("hostname");
port = UMParas.getPara("port");
baseDN = UMParas.getPara("basedn");
admin = UMParas.getPara("admin");
password = UMParas.getPara("pwd");
url = new StringBuffer("LDAP://");
url.append(host).append(":").append(port);
url.append("/").append(baseDN);
} catch (Exception e) {
e.printStackTrace();
System.out.println("");
}
// pwd="secret";
env = new Hashtable();
env.put("java.naming.factory.initial",
"com.sun.jndi.ldap.LdapCtxFactory");
env.put("java.naming.provider.url", url.toString());
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put("java.naming.security.principal", admin);
env.put("java.naming.security.credentials", password);
System.out.println("-------------");
}
public boolean checkAd() { //admin用户验证
try {
System.out.println("-----ddd--------");
InitialContext iCnt = new InitialContext(env);
System.out.println("-------eee------");
islogin = true;
} catch (AuthenticationException aue) {
// aue.printStackTrace();
islogin = false;
} catch (NamingException e) {
e.printStackTrace();
} catch (Exception eee) {
eee.printStackTrace();
} finally {
try {
ctx.close();
} catch (Exception ie) {
}
}
return islogin;
}
public boolean userLogin(String userName, String password) { //新建用户验证。
Hashtable envi = new Hashtable();
try {
envi.put("java.naming.factory.initial",
"com.sun.jndi.ldap.LdapCtxFactory");
envi.put("java.naming.provider.url", url.toString());
envi.put(Context.SECURITY_AUTHENTICATION, "simple");
envi.put("java.naming.security.principal", userName);
envi.put("java.naming.security.credentials", password);
InitialContext iCnt = new InitialContext(envi);
return true;
} catch (Exception e) {
//e.printStackTrace();
return false;
} finally {
try {
ctx.close();
} catch (Exception ie) {
}
}
}
} UMParas.java 代码
package ldap2;
import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.SAXBuilder;
public class UMParas {
private static HashMap prop;
private static long lastLoadTime;
private static long interval = 0x186a0L; //refresh per 100 second
// static Class class$0; /* synthetic field */
public UMParas() {
}
//input an para and return the result
public static synchronized String getPara(String paras)
throws IllegalArgumentException {
if (paras == null || paras.trim().length() == 0)
throw new IllegalArgumentException("Parameter's value invalid.");
long currentTime = System.currentTimeMillis();
if (prop == null || currentTime - lastLoadTime > interval)
reloadDom();
Object obj = prop.get(paras);
if (obj != null)
return (String) obj;
else
return null;
}
//load the xml file
private static synchronized void reloadDom() {
if (prop == null)
prop = new HashMap();
SAXBuilder builder = new SAXBuilder();
Document read_doc = null;
try {
read_doc = builder.build(UMParas.class
.getResource("ldapconfig.xml"));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Element rootElement = read_doc.getRootElement();
List list = rootElement.getChildren("para");
for (Iterator i = list.iterator(); i.hasNext();) {
Element current = (Element) i.next();
List item = current.getChildren("item");
Attribute code;
Attribute value;
for (Iterator j = item.iterator(); j.hasNext(); prop.put(code
.getValue(), value.getValue())) {
Element init = (Element) j.next();
code = init.getAttribute("code");
value = init.getAttribute("value");
}
}
System.out.println("load sucess");
lastLoadTime = System.currentTimeMillis();
}
public static void main(String args[]) {
System.out.println(getPara("hostname"));
}
} ldapconfig.xml 代码
<?xml version="1.0" encoding="GBK"?>
<sys_para>
<para>
<item code="hostname" value="192.168.1.106" description="LDAP服务器IP"/>
<item code="port" value="10389" description="服务器端口"/>
<item code="admin" value="uid=admin,ou=system" description="管理员帐号"/>
<item code="pwd" value="secret" description="密码"/>
<item code="basedn" value="ou=system" description="组织名(基准DN)"/>
</para>
</sys_para>
package org.charry.lib.ldap;import netscape.ldap.*;
import netscape.ldap.util.*;
import java.util.*;
import javax.naming.directory.Attribute;public class LDAPUtil {
private static UserProfile verifyLogin(String user, String pwd) {
String LDAPDN = "DC=charry,DC=org";
String MY_FILTER = "sAMAccountName=" + user;
String MY_ATTR[] = { "sn", "buildingName", "businessCategory", "c",
"co", "departmentNumber", "description", "displayName",
"distinguishedName", "employeeType", "givenName",
"homeDirectory", "info", "l", "mail", "manager", "mobile",
"name", "physicalDeliveryOfficeName", "postalAddress",
"streetAddress", "telephoneNumber", "textEncodedORAddress",
"title", "department", "division", "employeeID", "location",
"mailNickName", "sAMAccountName", "wWWHomePage" }; LDAPConnection ld = new LDAPConnection();
String LDAPServersStr = "ssuzdc3.charry.org;ssuzdc4.charry.org";
String[] LDAPServers = LDAPServersStr.split(";");
String LDAPServer = "";
for (int i = 0; i < LDAPServers.length; i++) {
LDAPServer = LDAPServers[i];
try {
ld.connect(LDAPServer, LDAPv2.DEFAULT_PORT);
ld.authenticate(user + "@charry.org", pwd);
break;
} catch (LDAPException e) {
e.printStackTrace();
}
} try {
LDAPSearchResults res = ld.search(LDAPDN, LDAPConnection.SCOPE_SUB,
MY_FILTER, MY_ATTR, false);
LDAPEntry findEntry = res.next(); String value = "";
LDAPAttribute attribute = null;
Enumeration enumVal = null; attribute = findEntry.getAttribute("mail");
if (attribute != null) {
enumVal = attribute.getStringValues();
value = (String) enumVal.nextElement();
System.out.println(value);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}