论坛首页 综合技术论坛

处女贴:JAVA操作LDAP目录服务

浏览 4444 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-09-05  

最近项目有用到LDAP目录服务,第一次接触这个东西,还请大神们指教.

这张图是我用Softerra LDAP Browser工具剪切下来的目录图片.我现在想要的效果是:在这多个ou列中新加一个ou=indicate目录,然后再想里面加相关数据,并且这些数据是以一对多的关系存在.

然后 我自己写了一段代码,请查看

/**
	 * Ldap连接
	 * 
	 * @throws Exception
	 */
	private static InitialLdapContext LdapConnect() throws Exception {
		try {
			String url ="ldap://localhost:389";
			String name ="cn=root";
			String pwd = "root";
			System.out.println(url+" "+name+" "+pwd);
			Hashtable hashtable = new Hashtable();
			hashtable.put(Context.AUTHORITATIVE, "true");
			hashtable.put("com.sun.jndi.ldap.connect.pool", "true");
			hashtable.put("java.naming.ldap.version", "3");
			hashtable.put(Context.INITIAL_CONTEXT_FACTORY,
					"com.sun.jndi.ldap.LdapCtxFactory");
			hashtable.put(Context.REFERRAL, "follow");
			hashtable.put(Context.PROVIDER_URL, url);
			hashtable.put(Context.SECURITY_AUTHENTICATION, "Simple");
			hashtable.put(Context.SECURITY_PRINCIPAL, name);
			hashtable.put(Context.SECURITY_CREDENTIALS, pwd);

			ctx = new InitialLdapContext(hashtable, null);
			System.out.println("Get LdapConnect:ctx=" + ctx);
		} catch (Exception e) {
			System.out.println("LdapConnect Sys Error:" + e.getMessage());
			throw new Exception(e.getMessage());
		}
		return ctx;
	}

 得到链接之后,就开始进行新增方法

/**
	 * 	新增
	 * @param phone	固话
	 * @param indicate	标示号
	 */
	
	public static void getAdd(String phone,String indicate){
		
		try {
			Attributes attrs = new BasicAttributes();

			Attribute objectClassAttr = new BasicAttribute("objectclass");
			objectClassAttr.add("top");
			objectClassAttr.add("person");
			objectClassAttr.add("ePerson");
			objectClassAttr.add("SHTELIndicate");
			attrs.put(objectClassAttr);
			
			attrs.put("phone", phone);
			attrs.put("cn", phone);
			attrs.put("sn", phone);
			attrs.put("indicate", indicate);

			LdapConnect().createSubcontext("cn=" + phone+ ",ou=indicate,dc=account,dc=mboss,dc=com", attrs);
            System.out.println("cg");
			
			
		} catch (Exception e) {
			e.printStackTrace();
		} 
		
	}

 接着进行测试

public static void main(String[] args) {
		getAdd("33589765","201309041705");
	}

 

执行之后,控制台报错



 

 

 不知道是不是我写的方法不对,真心不熟悉这个东西,还请各位提提建议,小弟在此谢过了.

 

  • 描述: 1
  • 大小: 2.6 KB
  • 大小: 13 KB
   发表时间:2013-09-06  
怎么都没人吖!?  大神们,帮帮我嘛!
0 请登录后投票
   发表时间:2013-09-12  
首先 你先用工具看看 增加这些功能是不是能完成。下来就是看代码
DirContext 这个东西你需要初始化 所有的增删改查 都是基于这个的操作。但这个又是需要配置Hashtable也就是你上面的。给你看这段代码就行:
public static DirContext init() {
    ResourceBundle rb = ResourceBundle.getBundle("application");
String ldapURL = rb.getString("ldapURL");
String admin = rb.getString("usernName");
String pwd = rb.getString("password");

        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY,
            "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, admin);
        env.put(Context.SECURITY_CREDENTIALS, pwd);

        DirContext ctx = null;

        try {
            env.put(Context.PROVIDER_URL, "ldap://128.192.159.13:389");
            ctx = new InitialDirContext(env);
        } catch (NamingException e) {
            e.printStackTrace();
        }

        return ctx;
    }
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics