package cn.com.ldap;
import java.util.Properties;
public class UserObject {
public static final String FIRST_NAME = "1";
public static final String LAST_NAME = "2";
public static final String COMMON_NAME = "3";
public static final String USER_ID = "4";
public static final String PASSWORD = "5";
public static final String EMAIL = "6";
public static final String PHONE = "7";
public static final String FAX = "8";
private Properties pro ;
/**
* 创建用户时使用
* @param firstName
* @param lastName
* @param commonName
* @param userId
*/
public UserObject(String firstName,String lastName,String commonName,String userId){
pro = new Properties();
pro.setProperty(FIRST_NAME,firstName);
pro.setProperty(LAST_NAME, lastName);
pro.setProperty(COMMON_NAME, commonName);
pro.setProperty(USER_ID, userId);
}
/**
* 修改用户时使用
* @param userId
*/
public UserObject(String userId){
pro = new Properties();
pro.setProperty(USER_ID, userId);
}
public void setFistname(String firstName){
pro.setProperty(FIRST_NAME, firstName);
}
public void setLastname(String lastName){
pro.setProperty(LAST_NAME, lastName);
}
public void setCommonName(String commonName){
pro.setProperty(COMMON_NAME, commonName);
}
public void setEmail(String email){
pro.setProperty(EMAIL, email);
}
public void setPhone(String phone){
pro.setProperty(PHONE, phone);
}
public void setFax(String fax){
pro.setProperty(FAX, fax);
}
public String getProperty(String propertyName){
return pro.getProperty(propertyName);
}
public int propSize(){
return pro.size();
}
}
·····················································
package cn.com.ldap;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
public class TestLdap {
private DirContext dirContext;
private Hashtable servInfo;
private static final String LDAP_URL = "ldap://150.18.31.25:389";//服务器地址
private static final String LDAP_MANAGER_DN = "uid=admin,ou=administrators,ou=topologymanagement,o=netscaperoot";//管理员
private static final String LDAP_MANAGER_PASSWORD = "gdltb417";//管理员密码
private static final String CHECK_TYPE = "simple";//验证方式
private static final String CONTEXT_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";
private static final String BASE_DN = "ou=People,dc=gdlt";
public TestLdap() throws NamingException{
setEnvironment();
dirContext = new InitialDirContext(servInfo);
createGroup();
}
/**
* 设置登录到LDAP服务器的信息
*/
private void setEnvironment(){
servInfo = new Hashtable();
servInfo.put(Context.INITIAL_CONTEXT_FACTORY,CONTEXT_FACTORY);
servInfo.put(Context.PROVIDER_URL, LDAP_URL);
servInfo.put(Context.SECURITY_AUTHENTICATION, CHECK_TYPE);
servInfo.put(Context.SECURITY_PRINCIPAL,LDAP_MANAGER_DN);
servInfo.put(Context.SECURITY_CREDENTIALS,LDAP_MANAGER_PASSWORD);
}
/**
* 创建一个用于测试的用户组(当用户组不存在时创建)
*/
private void createGroup()throws NamingException{
try{
dirContext.getAttributes(BASE_DN);
}catch(NamingException e){
Attribute objClass = new BasicAttribute("objectclass");
objClass.add("top");
objClass.add("groupofuniquenames");
Attribute cn = new BasicAttribute("cn","student");
Attributes atts = new BasicAttributes();
atts.put(objClass);
atts.put(cn);
dirContext.bind(BASE_DN,null, atts);
System.out.println("create group success!");
}
}
/**
* 关闭连接
*/
private void closeConnection(){
try {
dirContext.close();
} catch (NamingException e) {
e.printStackTrace();
}
}
/**
* 验证用户是否存在
* @param uid
* @return
*/
private boolean isUserExist(String uid){
try {
Attributes att = findUser(uid);
if(att != null){
return true;
}else{
return false;
}
} catch (NamingException e) {
return false;
}
}
/**
* 查找用户
* @param uid
* @return
* @throws NamingException
*/
private Attributes findUser(String uid) throws NamingException{
return dirContext.getAttributes("uid="+uid+","+BASE_DN);
}
/**
* 设置属性
* @param atts
* @param attName
* @param attValue
*/
private void putAttribute(Attributes atts,String attName,String attValue){
if(attValue != null && attValue.length() != 0){
Attribute att = new BasicAttribute(attName,attValue);
atts.put(att);
}
}
/**
* 获取属性
* @param attrs
* @param attrName
* @return
* @throws NamingException
*/
private Object getAttribute(Attributes attrs,String attrName) throws NamingException{
Attribute attr = attrs.get(attrName);
if(attr == null){
return "";
}else{
return attr.get();
}
}
/**
* 创建用户
* @param userObject
*/
public void createUser(UserObject userObject)throws NamingException{
if(userObject == null){
throw new NamingException("userObject is null");
}
String uid = userObject.getProperty(UserObject.USER_ID);
if(uid == null || uid.equals("")){
throw new NamingException("no uid info");
}
String firstName = userObject.getProperty(UserObject.FIRST_NAME);
if(firstName == null || firstName.equals("")){
throw new NamingException("no firstName info");
}
String lastName = userObject.getProperty(UserObject.LAST_NAME);
if(lastName == null || lastName.equals("")){
throw new NamingException("no lastNameinfo");
}
String commonName = userObject.getProperty(UserObject.COMMON_NAME);
if(commonName == null || commonName.equals("")){
throw new NamingException("no commonNameinfo");
}
String password = userObject.getProperty(UserObject.PASSWORD);
String email = userObject.getProperty(UserObject.EMAIL);
String phone = userObject.getProperty(UserObject.PHONE);
String fax = userObject.getProperty(UserObject.FAX);
Attributes attrs = new BasicAttributes();
Attribute objclass = new BasicAttribute("objectclass");
objclass.add("top");
objclass.add("person");
objclass.add("organizationalPerson");
objclass.add("inetorgperson");
attrs.put(objclass);
putAttribute(attrs, "cn", commonName);
putAttribute(attrs, "givenname", firstName);
putAttribute(attrs, "sn", lastName);
putAttribute(attrs, "uid", uid);
putAttribute(attrs, "userpassword", password);
putAttribute(attrs, "mail", email);
putAttribute(attrs, "telephonenumber", phone);
putAttribute(attrs, "facsimiletelephonenumber", fax);
dirContext.bind("uid="+uid+","+BASE_DN, null, attrs);
System.out.println("uid:"+uid+" is created");
}
/**
* 修改用户信息
* @param userObject
* @throws NamingException
*/
public void modifyUser(UserObject userObject)throws NamingException{
if(userObject == null ){
throw new NamingException("userObject is null");
}
String uid = userObject.getProperty(UserObject.USER_ID);
if(uid == null || uid.equals("")){
throw new NamingException("no uid info");
}
if(!isUserExist(uid)){
throw new NamingException("uid:"+uid+"does not exist");
}
int size = userObject.propSize();//如果属性个数只有一个,那么只设置了uid,不用修改用户属性
if(size > 1){
String firstName = userObject.getProperty(UserObject.FIRST_NAME);
String lastName = userObject.getProperty(UserObject.LAST_NAME);
String commonName = userObject.getProperty(UserObject.COMMON_NAME);
String email = userObject.getProperty(UserObject.EMAIL);
String password = userObject.getProperty(UserObject.PASSWORD);
String phone = userObject.getProperty(UserObject.PHONE);
String fax = userObject.getProperty(UserObject.FAX);
//设置属性
Attributes attrs = new BasicAttributes();
putAttribute(attrs, "cn", commonName);
putAttribute(attrs, "givenname", firstName);
putAttribute(attrs, "sn", lastName);
putAttribute(attrs, "userpassword", password);
putAttribute(attrs, "mail", email);
putAttribute(attrs, "telephonenumber", phone);
putAttribute(attrs, "facsimiletelephonenumber", fax);
dirContext.modifyAttributes("uid="+uid+","+BASE_DN,DirContext.REPLACE_ATTRIBUTE,attrs);
System.out.println("user (uid:"+uid+") is modified");
}else{
throw new NamingException("no info modified");
}
}
/**
* 删除用户
* @param uid
*/
public void deleteUser (String uid)throws NamingException{
if(!isUserExist(uid)){
throw new NamingException("user (uid:"+uid+") is not exist!");
}
dirContext.destroySubcontext("uid="+uid+","+BASE_DN);
System.out.println("user (uid:"+uid+") is deleted!");
}
/**
* 根据uid查询信息
* @param uid
* @throws NamingException
*/
public void selectUser(String uid)throws NamingException{
Attributes attrs;
System.out.println("select user(uid:"+uid+")````");
try {
attrs = findUser(uid);
System.out.println("-----------------------------");
System.out.println("User(uid: " + uid + ") listing...");
System.out.println("First Name: " +
getAttribute(attrs, "givenname"));
System.out.println("Last Name: " +
getAttribute(attrs, "sn"));
System.out.println("Common Name: " +
getAttribute(attrs, "cn"));
System.out.println("password: " +
getAttribute(attrs, "userpassword"));
System.out.println("User ID: " +
getAttribute(attrs, "uid"));
System.out.println("E-Mail: " +
getAttribute(attrs, "mail"));
System.out.println("Phone: " +
getAttribute(attrs, "telephonenumber"));
System.out.println("Fax: " +
getAttribute(attrs, "facsimiletelephonenumber"));
System.out.println("List completed.");
System.out.println("-----------------------------n");
} catch (NamingException ne) {
throw new NamingException("The user(uid: " + uid
+ ") is not exist!n");
}
}
//提供一个存有多个用户信息的数组查询多个用户
public void selectUser(String[] uid) {
for (int i = 0; i < uid.length; i++) {
try {
selectUser(uid[i]);
} catch (NamingException ne) {
System.out.println(ne);
continue;
}
}
}
protected void finalize() {
closeConnection();
}
}
························································································
package cn.com.ldap;
import javax.naming.NamingException;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// UserObject user = new UserObject("张","三","张三","zhangsan");
// UserObject user1 = new UserObject("李","四","李四","lisi");
try {
TestLdap tl = new TestLdap ();
// tl.createUser(user);
// tl.createUser(user1);
// user.setEmail("ttttttttttttt");
// user.setFax("aaaaaaaa");
// tl.modifyUser(user);
tl.selectUser("24401130100");
} catch (NamingException e) {
e.printStackTrace();
}
}
}
····································································
package cn.com.ldap;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchResult;
public class MyLdapTest {
/**
* @param args
* @throws NamingException
*/
public static void main(String[] args) throws NamingException{
Hashtable table1 = new Hashtable();
table1.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
table1.put(Context.PROVIDER_URL,"ldap://150.18.31.25:389");
table1.put(Context.SECURITY_AUTHENTICATION,"simple");
table1.put(Context.SECURITY_PRINCIPAL,"uid=admin,ou=administrators,ou=topologymanagement,o=netscaperoot");
table1.put(Context.SECURITY_CREDENTIALS, "gdltb417");
Hashtable table2 = new Hashtable();
table2.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
table2.put(Context.PROVIDER_URL,"ldap://localhost:39909");
table2.put(Context.SECURITY_AUTHENTICATION,"simple");
table2.put(Context.SECURITY_PRINCIPAL,"cn=Directory Manager");
table2.put(Context.SECURITY_CREDENTIALS, "12345678");
DirContext dirContext = new InitialDirContext(table1);
BasicAttributes ba = new BasicAttributes();
NamingEnumeration ne = dirContext.search("ou=People,dc=gdlt", ba);
while(ne.hasMoreElements()){
SearchResult result = (SearchResult)ne.nextElement();
System.out.println(result.getName());
Attributes attrs = result.getAttributes();
NamingEnumeration enu = attrs.getAll();
while(enu.hasMoreElements()){
Attribute att = (Attribute)enu.nextElement();
System.out.println("att.id:"+att.getID());
for(int i = 0;i < att.size();i++){
if(i >0){
System.out.println(",");
}else{
System.out.println("-------"+att.get(i));
}
}
}
}
}
}