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","測試");

}

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373352.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373352.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373352.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

flask開發restful api系列(1)

在此之前&#xff0c;向大家說明的是&#xff0c;我們整個框架用的是flask sqlalchemy redis。如果沒有開發過web&#xff0c;還是先去學習一下&#xff0c;這邊只是介紹如果從開發web轉換到開發移動端。如果flask還不是很熟悉&#xff0c;我建議先到這個網站簡單學習一下&am…

Apache Commons Lang StringUtils

因此&#xff0c;認為最好談論我喜歡的另一個Java庫。 它已經存在了一段時間&#xff0c;也許不是最令人興奮的庫&#xff0c;但是它非常有用。 我可能每天都使用它。 org.apache.commons.lang.StringUtils StringUtils是Apache Commons Lang&#xff08; http://commons.apac…

JEE7:展望新時代

計劃于2012年下半年發布的Java EE 7預計的JSR都已啟動并正在運行。 Java EE 7發行版是日期驅動的&#xff0c;它將反映該行業遷移到云中時不斷變化的需求&#xff1a;任何未準備就緒的內容將推遲到Java EE 8中使用 。 這是Java EE 7平臺中不同規范的關鍵功能的更新和摘要。 1。…

Cocos2d-JS項目之UI界面的優化

測試環境&#xff1a; iphone4、iOS6.1.2、chrome 37.2062.60&#xff0c;Cocos2d-js 3.6 之前寫了不少&#xff0c;實際項目也按這個去優化了&#xff0c;也有效果&#xff0c;但到最后才發現&#xff0c;尼瑪&#xff0c;之前都搞錯了&#xff0c;之所以有效果是歪打正著。。…

java數_java大數

java大數還是很好用的&#xff01;基本加入&#xff1a;import java.math.BigInteger;import jave.math.BigDecimal;分別是大數和大浮點數。首先讀入可以用&#xff1a;Scanner input new Scanner(System.in);BigInteger a input.nextBigInteger();這樣讀還是很方便的當然還有…

【Qt之Quick模塊】6. QML語法詳解_2類型系統

描述 在QML文檔中對象層次結構的定義中可能使用的類型可以來自各種來源。它們可能是: 由QML語言原生提供通過QML模塊通過c注冊由QML模塊作為QML文檔提供 此外&#xff0c;應用程序開發人員可以通過直接注冊c類型&#xff0c;或者通過在QML文檔中定義可重用的組件(然后可以導…

JS顯示當前時間(包含農歷時間)

時間格式&#xff1a; JavaScript代碼&#xff1a; var sWeek new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");var dNow new Date();var CalendarData new Arra…

Maven原型創建技巧

我最近需要為姜黃SOA項目創建一些Maven原型。 對于不了解的人來說&#xff0c; Maven原型是一種基于一些預先罐裝的項目模板生成項目的方法。 對于當前的姜黃SOA原型&#xff0c;它將創建一個多模塊Maven項目&#xff0c;該項目包含Interface和Service項目以及基本的WSDL和適當…

MyBatis操作指南-與Spring集成(基于注解)

轉載于:https://www.cnblogs.com/weilu2/p/mybatis_spring_integration_basic_on_annotation.html

Windows mysql boost_Win7下Boost庫的安裝

Boost庫是C領域公認的經過千錘百煉的知名C類庫&#xff0c;涉及編程中的方方面面&#xff0c;簡單記錄一下使用時的安裝過程1.boost庫的下載boost庫官網主頁&#xff1a;www.boost.org2.安裝將下載的壓縮包解壓到指定的目錄3.建立編譯工具bjam.exe在源碼目錄下執行bootstrap.ba…

5.2與終端進行對話

Linux提供了一個特殊的設備 /dev/tty &#xff0c;該設備始終是指向當前終端或者當前的登錄會話。 FILE* output fopen("/dev/tty", "w"); //向終端寫入字符串 fprintf(output, "%s\n", "world"); FILE* input fopen("/dev/tty…

JVM:如何分析線程轉儲

本文將教您如何分析JVM線程轉儲&#xff0c;并查明問題的根本原因。 從我的角度來看&#xff0c;線程轉儲分析是掌握Java EE生產支持的任何個人最重要的技能。 您可以從線程轉儲快照中獲取的信息量通常遠遠超出您的想象。 我的目標是與您分享我在過去10年中積累的有關線程轉儲分…

極光推送JPush的快速集成

首先到極光推送的官網上創建一個應用&#xff0c;填寫對應的應用名和包名。 創建好之后下載Demo 提取Sdk里面的圖片和xml等資源文件放自己項目的相應位置&#xff0c;然后要注意的是.so文件的放置位置&#xff1a; 在main目錄下新建一個jniLibs文件夾&#xff0c;放在這個文件夾…

c遺傳算法的終止條件一般_Matlab2 :Matlab遺傳算法(GA)優4~-r-具箱是基于基本操作 聯合開發網 - pudn.com...

Matlab2所屬分類&#xff1a;matlab例程開發工具&#xff1a;PDF文件大小&#xff1a;115KB下載次數&#xff1a;76上傳日期&#xff1a;2007-09-07 20:04:29上 傳 者&#xff1a;錢廣說明&#xff1a; &#xff1a;Matlab遺傳算法(GA)優4~-r-具箱是基于基本操作及終止條件、二…

用程序輸出表格

做應用程序的時候經常需要輸出excel表格&#xff0c;除了不同語言接口完善程度不同的麻煩以及要添加各種外部引用的麻煩之外還要考慮應用環境不同的office版本的問題&#xff0c;實在麻煩 當只需要輸出數據&#xff0c;不管顏色什么的的話&#xff0c;有個避免上述麻煩的辦法就…

elk系列1之入門安裝與基本操作

preface 我們每天都要查看服務器的日志&#xff0c;一方面是為了開發的同事翻找日志&#xff0c;另一方面是巡檢服務器查看日志&#xff0c;而隨著服務器數量以及越來越多的業務上線&#xff0c;日志越來越多&#xff0c;人肉運維相當痛苦了&#xff0c;此時&#xff0c;參考現…

Java 7 –反編譯項目硬幣

大家好&#xff0c;該是從2012年開始寫作的時候了。正如您在其他博客中可能已經看到的那樣&#xff0c;有一些更改可以使您使用Java編程時的開發人員生活變得更加輕松&#xff1a;Diamond運算符&#xff0c;Switchs中的Strings&#xff0c;嘗試使用資源&#xff0c;多次捕獲等 …

git安裝后找不見版本_無法安裝最新版本的Gitlab

這個問題不是代碼,而是Gitlab的安裝.我現在試圖安裝Gitlab幾天沒有成功.實際上,很久以前,他們提出了使用wget的方法非常好,但由于我們必須使用Curl的方法,所以不可能比下載更進一步.在Ubuntu 14.04機器上,以下命令有效&#xff1a;curl https://packages.gitlab.com/install/re…

在Excel表里面插入背景圖

工作中我們會經常用到MS Excel&#xff0c;通常我們打開MS Excel&#xff0c;里面的工作表都是空白單調的背景。當然了&#xff0c;MS Excel可以在工作簿里面插入背景圖片。那么問題來了&#xff0c;如果你沒有安裝Microsoft Office&#xff0c;該如何在Excel文件里面插入好看的…

Java 7:復制和移動文件和目錄

這篇文章是我關于Java 7 java.nio.file軟件包的系列文章的繼續&#xff0c;這次涵蓋了文件的復制和移動以及完整的目錄樹。 如果您曾經對Java缺少copy和move方法感到沮喪&#xff0c;那么請繼續閱讀&#xff0c;以免麻煩。 涵蓋范圍中包括非常有用的Files.walkFileTree方法。 但…