Tag Archives: ldap

Java 连接 ldap 的简单代码

ldap 连接在有的时候可以说是一场噩梦,其实如果你了解了她的工作原理之后,就好像很多事情一样,迎刃而解。

下面是我用来连接ldap的一段代码,希望对你有所启示:

package yhjhoo;

import static org.junit.Assert.*;

import java.util.Properties;

import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.InitialDirContext;

import org.junit.Test;

public class LdapTest {

	@Test
	public void testLdap(){
		LdapTest test = new LdapTest();
		assertTrue(test._authLdap("domain\\admin", "secret"));
	}
	
	private boolean _authLdap(String userName, String password){
		String ldapHost = "ldap://localhost:389";
		
		Properties props = new Properties();
		props.put(Context.INITIAL_CONTEXT_FACTORY,
				"com.sun.jndi.ldap.LdapCtxFactory");

		props.put(Context.SECURITY_AUTHENTICATION, "simple"); // use simple
																// authentication
																// mechanism
		props.put(Context.SECURITY_PRINCIPAL, ""+userName);
		props.put(Context.SECURITY_CREDENTIALS, "" + password);
		props.put(Context.PROVIDER_URL, ldapHost);
		try {
//			DirContext ctx = new InitialDirContext(props);
			new InitialDirContext(props);
			return true;
		} catch (NamingException e) {
			e.printStackTrace();
		} catch (Exception e){
			e.printStackTrace();
		}
		
		return false;
	}
}

Spring LdapTemplate 连接 LDAP 服务器缓慢的问题

同时有两个windows AD, 配置相同,代码相同,一个速度超快,一个慢的要死,差不多要10秒

还好spring ldap 是开源的,看源码查看其实运行速度很快,只有其中遍历的时候比较慢。 于是就想到可能是没有设置base

<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
        <property name="url" value="ldap://192.168.1.1:389/dc=go,dc=local"/>
        <property name="userDn" value="cn=root"/>
        <property name="password" value="password"/>
</bean>
<bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate">
        <property name="contextSource" ref="contextSource"/>
</bean>

修改后如下

<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
        <property name="url" value="ldap://192.168.1.1:389/dc=go,dc=local"/>
        <property name="userDn" value="cn=root"/>
        <property name="base" value="OU=User,dc=go,dc=local" />
        <property name="password" value="password"/>
</bean>
<bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate">
        <property name="contextSource" ref="contextSource"/>
</bean>

 

红色部分根据自己的情况来定,你可以用ADExplorer 来查看这部分内容