日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 连接ldap_ldap java 连接demo

發布時間:2023/12/1 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 连接ldap_ldap java 连接demo 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

public class LDAPHelper {

/**

* LDAP可以理解為一個多級目錄,這里,表示要連接到那個具體的目錄

*/

private final String baseDn = "ou=People,dc=changyeyi,dc=com";

private LdapContext ctx = null;

private final Control[] connCtls = null;

private void connect() {

Hashtable env = new Hashtable<>();

String factory = "com.sun.jndi.ldap.LdapCtxFactory";

env.put(Context.INITIAL_CONTEXT_FACTORY, factory);

String url = "ldap://192.168.31.178:389/";

env.put(Context.PROVIDER_URL, url + baseDn);

env.put(Context.SECURITY_AUTHENTICATION, "simple");

String root = "cn=admin,dc=changyeyi,dc=com";

//管理員dn

env.put(Context.SECURITY_PRINCIPAL, root);

// 管理員密碼

env.put(Context.SECURITY_CREDENTIALS, "123456");

try {

ctx = new InitialLdapContext(env, connCtls);

System.out.println( "連接成功" );

} catch (javax.naming.AuthenticationException e) {

System.out.println("連接失敗:");

e.printStackTrace();

} catch (Exception e) {

System.out.println("連接出錯:");

e.printStackTrace();

}

}

private void closeContext(){

if (ctx != null) {

try {

ctx.close();

}

catch (NamingException e) {

e.printStackTrace();

}

}

}

/**

* dn就是目標名字+當前目錄名字

*/

private String getUserDN(String uid) {

String userDN = "";

connect();

try {

SearchControls constraints = new SearchControls();

constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);

//第一個參數是從哪個目錄下開始查,因為連接的url里已經指定了ou=People,dc=gosun,dc=com,所以這里填""即可

//第二個參數是查詢條件,uid、email等,都是ldap中存放的參數

NamingEnumeration en = ctx.search("", "uid=" + uid, constraints);

if (en == null || !en.hasMoreElements()) {

System.out.println("未找到該用戶");

}

while (en != null && en.hasMoreElements()) {

SearchResult obj = en.nextElement();

if (obj != null) {

SearchResult si = obj;

userDN += si.getName();

userDN += "," + baseDn;

} else {

System.out.println((Object) null);

}

}

} catch (Exception e) {

System.out.println("查找用戶時產生異常。");

e.printStackTrace();

}

return userDN;

}

/**

* 通過uid獲取dn,然后連接驗證

*/

public boolean authentication(String uid, String password) {

boolean valide = false;

String userDN = getUserDN(uid);

try {

ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, userDN);

ctx.addToEnvironment(Context.SECURITY_CREDENTIALS, password);

ctx.reconnect(connCtls);

System.out.println(userDN + " 驗證通過");

valide = true;

} catch (AuthenticationException e) {

System.out.println(userDN + " 驗證失敗");

System.out.println(e.toString());

} catch (NamingException e) {

System.out.println(userDN + " 驗證失敗");

}

closeContext();

return valide;

}

public boolean addUser(String usr, String pwd,String uid,String description) {

try {

connect();

BasicAttributes attrsbu = new BasicAttributes();

BasicAttribute objclassSet = new BasicAttribute("objectclass");

objclassSet.add("inetOrgPerson");

attrsbu.put(objclassSet);

attrsbu.put("sn", usr);

attrsbu.put("cn", usr);

attrsbu.put("uid", uid);

attrsbu.put("userPassword", pwd);

attrsbu.put("description", description);

//這里指定目錄名字,可以用uid=/cn=,如uid=changyeyi,或者cn=yaoji

ctx.createSubcontext("uid="+uid+"", attrsbu);

return true;

} catch (NamingException ex) {

ex.printStackTrace();

}

closeContext();

return false;

}

public static void main(String[] args) {

LDAPHelper ldap = new LDAPHelper();

/**

* 用戶認證

*/

/*if(ldap.authentication("changyeyi", "changyeyi")){

System.out.println( "該用戶認證成功" );

}*/

/**

* 用戶添加

*/

ldap.addUser("emma","emma","emma_uid","測試");

}

}

總結

以上是生活随笔為你收集整理的java 连接ldap_ldap java 连接demo的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。