1. 程式人生 > >JAVA實現LDAP連線驗證

JAVA實現LDAP連線驗證

什麼是LDAP

LDAP(輕量目錄訪問協議),簡單的說,LDAP是一個得到關於人或者資源的集合、靜態資料的快速方式

這種說法似乎有點抽象,結合這幾天在做的一個專案具體來談一下。

ADLDAP,初來乍到的面對這些在課本上不可能碰到的新術語還真是有些懵了,查了大量的資料之後,終於開始有點感覺了。

大多數企業及單位都會有人員管理系統,而有很多是用window server進行管理的,其中的原因相信大家早已明白:簡單,方便。但是很多時候我們會需要利用程式獲取伺服器上面的人員資料,聽起來似乎無從下手,但由於資源大多是儲存在AD域下面的,於是LDAP能夠幫我們輕易的完成這件事。

最開始找了很多的程式,但都走了彎路,因為這些程式大多沒有解釋幾個關鍵概念:

OU(組織單元):你可以理解為目錄資訊

O(組織名):可以理解為公司名,比如說O=foobar.com,但是更多情況下我們會把它拆分為DC=foobar,DC=com(實踐發現使用O會出現連線錯誤,不知道是否這種表示方式已經被DC替代)

下面是一段例項程式碼,之後會解釋了各個欄位的意思及用法:

Java程式碼  收藏程式碼
  1. package ldap;  
  2. import java.util.Iterator;  
  3. import com.novell.ldap.LDAPAttributeSet;  
  4. import com.novell.ldap.LDAPConnection;  
  5. import
     com.novell.ldap.LDAPEntry;  
  6. import com.novell.ldap.LDAPException;  
  7. import com.novell.ldap.LDAPSearchResults;  
  8. public class LdapCon {  
  9.     public static void main(String[] args) {  
  10.         LdapCon lc=new LdapCon();  
  11.         try {  
  12.             lc.conenction();  
  13.         } catch (LDAPException e) {  
  14.             e.printStackTrace();  
  15.         }  
  16.     }  
  17.     private static void conenction() throws LDAPException{  
  18.         String MY_HOST = "192.168.139.132";//訪問AD域的IP地址  
  19.         int MY_PORT = 389;//埠號,預設為389  
  20.         LDAPConnection ld = new LDAPConnection();  
  21. //      ld.setSocketTimeOut(21000);//設定超時  
  22.         ld.connect( MY_HOST, MY_PORT );  
  23. //      ld.bind(null, null);  
  24.         ld.bind("[email protected]""123456");  
  25.         String searchBase = "OU=專案部,DC=smallbusiness,DC=local";//域名入口  
  26.         int searchScope = LDAPConnection.SCOPE_SUBORDINATESUBTREE;//搜尋範圍  
  27.         //過濾器  
  28.         String filter="(|(objectclass=person)(objectclass=user)(objectclass=organizationalPerson))";  
  29.         LDAPSearchResults searchResults =ld.search(searchBase,  
  30.         searchScope,  
  31.         filter,  
  32.         null,  
  33.         false);  
  34.         while ( searchResults.hasMore()) {  
  35.             LDAPEntry nextEntry = searchResults.next();  
  36.             System.out.println("We found "+nextEntry.getDN());  
  37. //          LDAPAttributeSet attributeSet = nextEntry.getAttributeSet();  
  38. //          Iterator ite=attributeSet.iterator();  
  39. //          while(ite.hasNext()){  
  40. //              System.out.println(ite.next());  
  41. //          }  
  42.         }  
  43.     }  
  44. }  

具體的解釋一下下面這幾個概念

Ld.bind(loginDN,loginPW):表示LDAPConnection的繫結,不能省略,你可以輸入兩個null來進行匿名登入,當然,以匿名方式登入並不代表你具有所有的許可權。下面就來說一下這兩個引數到底應該怎麼填,嘗試了很多種方法,DN表示域名,根據這種命名方法來猜測,loginDN應該是登入名加域名的表示方式,而你在windwos serverAD域中進行使用者新增的時候就會發現,使用者唯一標示名的表示方式是[email protected],密碼則是對應使用者的密碼。

ld.setSocketTimeOut(int),設定連線超時,這個方法並沒有產生實際的效果,因為即使不設定,伺服器在連線不上的時候依然會超時。

Search Scope:表示搜尋的深度,有四個基本引數:

• SCOPE_BASE. 這個只在你已經知道了目錄結構的時候使用,你用這種搜尋方式輸出的時候會發現什麼都看不到

• SCOPE_ONE. 只搜尋處在該層目錄的資料(也就是說如果存在多層結構,處在該層目錄一下的目錄裡面的資料就搜不到)。

• SCOPE_SUB. 按層次遍歷,可以搜到該目錄下面的所有資料,包含目錄.

• SCOPE_SUBORDINATESUBTREE. 搜尋的形式跟上面一個一樣,但是不包含基礎的資料,具體什麼含義,試試就知道了。

Filter:過濾器,and = "&" filterlistor = "|" filterlistnot = "!" filterlist,就像我程式碼中寫到的一樣以|開頭,表示條件或。還有一種表示方式就是objectClass=*,使用萬用字元表示所有。

 有了資料你自然明白該做什麼了O(∩_∩)O~,不過還有一點依然需要強調,就像很多前輩跟我說過的,學好演算法跟資料結構,前兩天想單純依靠迴圈的邏輯控制解決目錄結構的問題,但努力之後才發現,利用多叉樹解決要快得多,雖然我一開始就意識到目錄本身就是一個樹狀結構,但是加以實踐才是問題的最好答案。演算法和資料結構受到如此之重視就是因為用對了的演算法和資料結構有可能使你的程式碼在效率和簡潔度上出現意想不到的結果。

路漫漫其修遠兮~

相關推薦

JAVA實現LDAP連線驗證

什麼是LDAP? LDAP(輕量目錄訪問協議),簡單的說,LDAP是一個能得到關於人或者資源的集合、靜態資料的快速方式。 這種說法似乎有點抽象,結合這幾天在做的一個專案具體來談一下。 AD,LDAP,初來乍到的面對這些在課本上不可能碰到的新術語還真是有些懵了,查了大

java實現LDAP目錄登陸驗證

(2-2009至6-2009)要做一套對專案開發、跟蹤、管理、多伺服器同步備份的系統整合。主要結合svn、apache、tomcat、bugzilla、sendmail、openSSL、LDAP這些開源優秀軟體在ubuntu下實現。其中涉及到JAVA EE的WEB開發,EM

Java實現身份證號碼驗證源碼分享

分隔 toc bst nbsp port birt random exti 一位數 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar;

java 實現登錄驗證碼 (kaptcha 驗證碼組件)

內容 清除 pub auto 二維碼 我們 constant nts extend 驗證碼的作用: 1、防止廣告機註冊和發帖、評論。2、防止暴力破解密碼,特別是有管理員權限的密碼。 在這裏介紹一種非常實用的驗證碼生成工具:kaptcha 這個工具,可以生成各種樣式的驗證碼

【原始碼分享】java實現對接簡訊驗證碼應用功能

今天公司提出一個需求,要在現有專案上收集註冊使用者的真實手機號,由於之前沒有接觸過這一塊,只能尋求度孃的幫助,經過一天的努力,終於完成了,現整理記錄下已備查閱。 1 解決方案:在註冊時要求使用者進行手機驗證。2 尋找簡訊供應商:由於對這一塊不是太懂,大學同學推薦一家他們公司在用的給我。3 程式碼實現 首先到

JAVA實現註冊頁面驗證碼重新整理

撰寫人——軟體二班——陳喜平 需要的工具:tomcat/eclipse/jdk/(注意jdk版本要和tomca相匹配,以及注意區分32位和64位) 步驟:依次建立servlet (伺服器需要)/ jsp(頁面需要) 引入web.xml 如圖所示: doget方法裡面的程式碼: prot

JAVA實現手機簡訊驗證

手機簡訊驗證碼介面來自於網易雲手機簡訊介面 package com.netease.code; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.http.H

Java實現點選驗證

效果 話不多說,先看實現的效果,其中方框為點選區域,真實場景要去掉此方框 核心流程分析 隨機獲取背景圖片 隨機獲取中文字元 在背景圖片中隨機獲取中文字元位置 設定中文旋轉隨機角度、字型顏色 儲存生成文字的座標集合、提示資訊、驗證碼圖片 前端根據提示資訊獲取相

java 實現傳送簡訊驗證碼功能

如何使用java + maven的專案環境傳送簡訊驗證碼,本文使用的是榛子云簡訊 的介面。 1. 安裝sdk 下載地址: http://smsow.zhenzikj.com/doc/sdk.html 下載下來是jar檔案,需要將jar釋出到本地的maven倉庫中, 在c

java實現郵箱註冊驗證

在日常生活中,我們在一個網站中註冊一個賬戶時,往往在提交個人資訊後,網站還要我們通過手機或郵件來驗證,郵件的話大概會是下面這個樣子的: 使用者通過點選連結從而完成註冊,然後才能登入。 也許你會想,為什麼要這麼麻煩直接提交註冊不就行了嗎?這其中很大一部分原因是為

Java實現中文算數驗證碼(算數運算+-*/)

為了防止,頁面向資料庫暴力註冊入力,使用者登入暴力破解,所以加入驗證碼,驗證碼無法被軟體獲取上邊的內容(加入算數計算,更加安全),所以在現在技術,暫時安全。 先看效果圖: 第一次載入比較慢,防止無法載入驗證碼顯示,後臺獲取準備好的預設正在載入圖片(靜態圖片

Java實現遠端連線Linux並執行命令

需要的jar包 <dependency> <groupId>ch.ethz.ganymed</groupId> <artifactId>ganymed-ssh2</art

java實現手機簡訊驗證的基本思路

整體流程: 客戶填入手機號,通過客戶端點選獲取驗證碼按鈕,驗證手機號是否有效,有效則客戶端傳送請求到後臺伺服器,客戶端開始倒計時60s,不通過則返回; 伺服器,驗證手機號是否被註冊或有效,通過則呼叫

Java實現ping命令驗證遠端主機是否線上

為了使用java來實現ping的功能,有人推薦使用java的 Runtime.exec()方法來直接呼叫系統的Ping命令,也有人完成了純Java實現Ping的程式,使用的是Java的NIO包(native io, 高效IO包)。但是裝置檢測只是想測試一個遠端主機是否可用。所以,可以使用以下三種方式

java實現圖片隨機驗證

轉自:https://blog.csdn.net/zhulin40/article/details/51899487<div class="form-group col-lg-6"> <label for="id" class="col-sm-

Zookeeper客戶端基本操作java實現——建立連線、建立節點、新增修改節點內容、獲取子節點、獲取節點資料、刪除節點

一、引入Zookeeper包,新增pom依賴 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper<

java 實現傳送簡訊驗證碼(網易雲)

連結:https://pan.baidu.com/s/1saRmzciNQWpFxHJRN0ISTg 密碼:siyt 實現傳送驗證碼的工程下載 1、我們開啟這個工程,檢視其中的程式碼 package com.ghj.test; import java.io.IOExce

java實現身份證有效性驗證

經測試可用 public class ValidateIdentityCard { /** * 功能:身份證的有效驗證<br> * <br> * * 身份證號碼驗證 1、號碼的結構 公民身份號碼是特徵組合碼,由十七位數字本體碼和一

java實現郵件傳送驗證

java實現郵件傳送驗證碼    建議不要用qq郵箱,我使用qq郵箱直接一直給我報530錯誤,我一直認為我程式碼寫的有錯誤或者POP3/SMTP服務沒弄好。所以建議註冊個別的郵箱,我就申請了個網易163郵箱瞬間就好了。所以去申請個別的郵箱吧。   用郵

Java實現超簡單驗證碼識別

閒來想實現程式模擬登陸一個系統,說白了,就是寫個簡單的爬蟲,但是無奈,遇到了數字圖片驗證碼,在查閱了一些方案以後,遂決定自己手寫程式碼實現驗證碼識別,分享一下整個過程。 圖片驗證碼是什麼 圖片驗證碼,這個大家應該都見過。最普遍的圖片驗證碼就是一張