十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
应该是用户名写的不对,env.put(Context.SECURITY_PRINCIPAL,"cn=" + username);
公司专注于为企业提供成都网站建设、成都网站制作、微信公众号开发、商城开发,小程序开发,软件按需制作网站等一站式互联网企业服务。凭借多年丰富的经验,我们会仔细了解各客户的需求而做出多方面的分析、设计、整合,为客户设计出具风格及创意性的商业解决方案,成都创新互联公司更提供一系列网站制作和网站推广的服务。
这里面应该写用户的全路径名,比如cn=xxxxx,dc=combatelecom,dc=com
说白了就是你怎么从根节点找到的用户,把用户节点的dn拷贝出来就行了
另外那个URL部分写成env.put(Context.PROVIDER_URL,"ldap://10.10.0.13:389")
使用netscape的ldap工具包。使用其它的工具包,写法类似。
注:必须知道base dn,以下假定ou=admin为base dn。若有明确的base dn,那写法比如:ou=admin,o=test1
源代码如下:
==========================
import netscape.ldap.*;
public class SearchTest {
public static void main(String[] args) {
LDAPConnection lc = null;
LDAPEntry findEntry = null;
int status = -1;
try {
// lc = ConnectionPool.
lc = new LDAPConnection();
/* Connect to server */
String MY_HOST = "localhost";
int MY_PORT = 389;
lc.connect(MY_HOST, MY_PORT);
System.out.println("1=========" +lc.isConnected());
lc.authenticate("cn=Directory Manager","password");
System.out.println("2=========" +lc.isConnected());
/* search for all entries with surname of Jensen */
String MY_FILTER = "(objectclass=*)";
String MY_SEARCHBASE = "ou=admin";
LDAPSearchConstraints cons = lc.getSearchConstraints();
cons.setBatchSize(0);
cons.setMaxResults(5);
MY_FILTER = "(objectclass=*)" ;
LDAPSearchResults res = lc.search(MY_SEARCHBASE,
LDAPConnection.SCOPE_ONE,
MY_FILTER,
null,
false,
cons);
while (res.hasMoreElements()) {
LDAPEntry cLDAPEntry = res.next() ;
System.out.println("" + cLDAPEntry.getDN());
System.out.println("" + cLDAPEntry.toString());
}
status = 0;
} catch (LDAPException e) {
System.out.println("Error: " + e.toString());
e.printStackTrace();
}
/* Done, so disconnect */
if ((lc != null) lc.isConnected()) {
try {
lc.disconnect();
System.out.println("3=========" +lc.isConnected());
} catch (LDAPException e) {
System.out.println("Error: " + e.toString());
}
}
System.out.println("4=========" +lc.isConnected());
System.exit(status);
}
}
我写过这类代码,与你这段代码有些不一样。
env.put(Context.SECURITY_AUTHENTICATION, "none");这段中我指定他的认证方式是"simple",也就是采用用户名/密码的方式认证,我也不是很清楚采用none是否能够成功认证。
认证用的用户名应该要写全,你需要查看每一个上级节点的属性,打个比方,IS是CN,FADU是DC,funo.com.cn是DC,那你的认证用户名就应该是:
DC=funo.com.cn,DC=FADU,CN=IS,CN=caiwei
你先试一下吧,还有问题再讨论,令附上LDAP ERROR CODE:
写代码程序把你写的这个 DN,分拆成每个 SubContext ,然后在代码中绑定上去:
// initialize config
Properties config = new Properties();
config.setProperty(Context.PROVIDER_URL, 你的 root URL);
Context root = new InititalContext().lookup("");
Context abc = root.createSubContext("ou=Abc");
Context cde = abc.createSubContext("ou=Cde");
...
你的收到的 DN 分拆成这几个步骤依次 createSubContext 就好了。