導航:首頁 > 編程語言 > javaldap查詢

javaldap查詢

發布時間:2022-08-31 18:58:47

1. java ldap 查詢報錯,急求大神解決啊,謝謝

LDAP: error code 49表示認證失敗
請檢查你的BINDDN和對應的密碼,一定要寫正確才行。

與base DN沒有關系。

2. LDAP和AD域的介紹及使用

1 LDAP入門

1.1 定義

LDAP是輕量目錄訪問協議(LightweightDirectory Access Protocol)的縮寫,LDAP標准實際上是在X.500標准基礎上產生的一個簡化版本。

1.2 目錄結構

LDAP也可以說成是一種資料庫,也有client端和server端。server端是用來存放數據,client端用於操作增刪改查等操作,通常說的LDAP是指運行這個資料庫的伺服器。只不過,LDAP資料庫結構為樹結構,數據存儲在葉子節點上。

因此,在LDAP中,位置可以描述如下

因此,蘋果redApple的位置為

dn標識一條記錄,描述了數據的詳細路徑。因此,LDAP樹形資料庫如下

因此,LDAP樹形結構在存儲大量數據時,查詢效率更高,實現迅速查找,可以應用於域驗證等。

1.3 命名格式

LDAP協議中採用的命名格式常用的有如下兩種:LDAP URL 和X.500。

任何一個支持LDAP 的客戶都可以利用LDAP名通過LDAP協議訪問活動目錄,LDAP名不像普通的Internet URL名字那麼直觀,但是LDAP名往往隱藏在應用系統的內部,最終用戶很少直接使用LDAP 名。LDAP 名使用X.500 命名規 范,也稱為屬性化命名法,包括活動目錄服務所在的伺服器以及對象的屬性信息。

2 AD入門

2.1 AD定義

AD是Active Directory的縮寫,AD是LDAP的一個應用實例,而不應該是LDAP本身。比如:windows域控的用戶、許可權管理應該是微軟公司使用LDAP存儲了一些數據來解決域控這個具體問題,只是AD順便還提供了用戶介面,也可以利用ActiveDirectory當做LDAP伺服器存放一些自己的東西而已。比如LDAP是關系型資料庫,微軟自己在庫中建立了幾個表,每個表都定義好了欄位。顯然這些表和欄位都是根據微軟自己的需求定製的,而不是LDAP協議的規定。然後微軟將LDAP做了一些封裝介面,用戶可以利用這些介面寫程序操作LDAP,使得ActiveDirectory也成了一個LDAP伺服器。

2.2 作用

2.2.1 用戶服務

管理用戶的域賬號、用戶信息、企業通信錄(與電子郵箱系統集成)、用戶組管理、用戶身份認證、用戶授權管理、按需實施組管理策略等。這里不單單指某些線上的應用更多的是指真實的計算機,伺服器等。

2.2.2 計算機管理

管理伺服器及客戶端計算機賬戶、所有伺服器及客戶端計算機加入域管理並按需實施組策略。

2.2.3 資源管理

管理列印機、文件共享服務、網路資源等實施組策略。

2.2.4 應用系統的支持

對於電子郵件(Exchange)、在線及時通訊(Lync)、企業信息管理(SharePoint)、微軟CRM&ERP等業務系統提供數據認證(身份認證、數據集成、組織規則等)。這里不單是微軟產品的集成,其它的業務系統根據公用介面的方式一樣可以嵌入進來。

2.2.5 客戶端桌面管理

系統管理員可以集中的配置各種桌面配置策略,如:用戶適用域中資源許可權限制、界面功能的限制、應用程序執行特徵的限制、網路連接限制、安全配置限制等。

2.3 AD域結構常用對象

2.3.1 域(Domain)

域是AD的根,是AD的管理單位。域中包含著大量的域對象,如:組織單位(Organizational Unit),組(Group),用戶(User),計算機(Computer),聯系人(Contact),列印機,安全策略等。

可簡單理解為:公司總部。

2.3.2 組織單位(Organization Unit)

組織單位簡稱為OU是一個容器對象,可以把域中的對象組織成邏輯組,幫助網路管理員簡化管理組。組織單位可以包含下列類型的對象:用戶,計算機,工作組,列印機,安全策略,其他組織單位等。可以在組織單位基礎上部署組策略,統一管理組織單位中的域對象。

可以簡單理解為:分公司。

2.3.3 群組(Group)

群組是一批具有相同管理任務的用戶賬戶,計算機賬戶或者其他域對象的一個集合。例如公司的開發組,產品組,運維組等等。可以簡單理解為分公司的某事業部。

群組類型分為兩類:

2.3.4 用戶(User)

AD中域用戶是最小的管理單位,域用戶最容易管理又最難管理,如果賦予域用戶的許可權過大,將帶來安全隱患,如果許可權過小域用戶無法正常工作。可簡單理解成為某個工作人員。

域用戶的類型,域中常見用戶類型分為:

一個大致的AD如下所示:

總之:Active Directory =LDAP伺服器 LDAP應用(Windows域控)。ActiveDirectory先實現一個LDAP伺服器,然後自己先用這個LDAP伺服器實現了自己的一個具體應用(域控)。

3 使用LDAP操作AD域

特別注意:Java操作查詢域用戶信息獲取到的數據和域管理員在電腦上操作查詢的數據可能會存在差異(同一個意思的表示欄位,兩者可能不同)。

連接ad域有兩個地址:ldap://XXXXX.com:389 和 ldap://XXXXX.com:636(SSL)。

埠389用於一般的連接,例如登錄,查詢等非密碼操作,埠636安全性較高,用戶密碼相關操作,例如修改密碼等。

域控可能有多台伺服器,之間數據同步不及時,可能會導致已經修改的數據被覆蓋掉,這個要麼域控縮短同步的時間差,要麼同時修改每一台伺服器的數據。

3.1 389登錄

3.2 636登錄驗證(需要導入證書)

3.3 查詢域用戶信息

3.4 重置用戶密碼

3.5 域賬號解鎖

總結

3. 用java操作ldap是報錯,求大神解救

出自 http://blog.csdn.net/techchan/article/details/5440775

1. error code 53
===========================================================================
問題:創建新用戶時出現數據後端異常
在 WebSphere Portal Express 中,您可以設置密碼的最短和最長長度。如果設置的密碼長度與 LDAP 伺服器的策略不相同,則在創建用戶時您可能會看到以下異常:
EJPSG0015E: Data Backend Problem com.ibm.websphere.wmm.exception.WMMSystemException:
The following Naming Exception occurred ring processing:
"javax.naming.: [LDAP: error code 53 - 0000052D:
SvcErr: DSID-031A0FBC, problem 5003 (WILL_NOT_PERFORM), data 0
]; remaining name 'cn=see1anna,cn=users,dc=wps510,dc=rtp,dc=raleigh,dc=ibm,dc=com';
resolved object com.sun.jndi.ldap.LdapCtx@7075b1b4".

原因:這是由於「密碼不能滿足密碼策略的要求」導致

解決方案:
1. 打開域安全策略-安全設置-賬戶策略-密碼策略-密碼必須符合復雜性要求。定義這個策略設置為:已禁用。/ 密碼長度最小值:定義這個策略設置為0。

2. 打開域控制器安全策略-安全設置-賬戶策略-密碼策略-密碼必須符合復雜性要求。定義這個策略設置為:已禁用。/ 密碼長度最小值:定義這個策略設置為0。

3. 最後運行刷新組策略命令為:gpupdate /force

===========================================================================

2. Need to specify class name
===========================================================================
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial

原因:LdapContext在處理完上個環節被close(),LdapContext=null;
解決方案:不close;

3. error code 50
===========================================================================
javax.naming.NoPermissionException: [LDAP: error code 50 - 00002098: SecErr: DSID-03150A45, problem 4003 (INSUFF_ACCESS_RIGHTS), data 0

4. error code 68
===========================================================================
javax.naming.NameAlreadyBoundException: [LDAP: error code 68 - 00000524: UpdErr: DSID-031A0F4F, problem 6005 (ENTRY_EXISTS), data 0

原因:創建的用戶已經存在了

7. No trusted certificate
===========================================================================
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found
1.cas機器A,A上a,b,c服務運行良好
2.website 位於B機器,cas可以截獲請求,跳轉javax.net.ssl.SSLHandshakeException

將A上生生成的客戶端密鑰,導入B
A運行
sudo keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore -validity 3600

$ keytool -export -trustcacerts -alias tomcat -file server.cer -keystore server.keystore -storepass changeit

$ sudo keytool -import -trustcacerts -alias tomcat -file server.cer -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit
B運行最後一句即可

建立信任關系,客戶,服務密鑰,客戶多處

8. error code 1
===========================================================================
javax.naming.NamingException: [LDAP: error code 1 - 00000000: LdapErr: DSID-0C090AE2, comment: In order to perform this operation a successful bind must be completed on the connection., data 0, vece

原因:新增域用戶的時候,ctx沒有綁定管理員用戶
解決方法:ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, adminUser + "@" + ldapProperty.getDomain());
ctx.addToEnvironment(Context.SECURITY_CREDENTIALS, adminPwd);

9. error code 50
==========================================================================
javax.naming.NoPermissionException: [LDAP: error code 50 - 00000005: SecErr: DSID-03151E04, problem 4003 (INSUFF_ACCESS_RIGHTS)

原因:新建域用戶時候,ctx綁定到一個普通用戶(該用戶沒有新建用戶的許可權)
解決方法:使用管理員用戶進行綁定:
ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, adminUser + "@" + ldapProperty.getDomain());
ctx.addToEnvironment(Context.SECURITY_CREDENTIALS, adminPwd);

10. error code 19
==========================================================================
javax.naming.directory.: [LDAP: error code 19 - 0000052D: AtrErr: DSID-03190F00, #1:
0: 0000052D: DSID-03190F00, problem 1005 (CONSTRAINT_ATT_TYPE)

原因:這個最大的可能是不滿足域安全策略:如密碼復雜性、密碼最短使用期限、強制密碼歷史。即長度、包含的字元、多久可以修改密碼、是否可以使用歷史密碼等。

11. LDAP: error code 50
==========================================================================
javax.naming.NoPermissionException: [LDAP: error code 50 - 00000005: SecErr: DSID-031A0F44, problem 4003 (INSUFF_ACCESS_RIGHTS)

原因:這個是最初代碼使用的replace操作,這個在AD里對應的是密碼重設(普通用戶默認沒有這個許可權,管理員可以操作),另外remove操作時提供的舊密碼錯誤也可能報這個異常

12. RSA premaster secret error
==========================================================================
javax.naming.CommunicationException: simple bind failed: 172.18.20.4:636 [Root exception is javax.net.ssl.SSLKeyException: RSA premaster secret error]

原因:Tomcat 配置的JDK與添加證書的的JDK不一致。如:證書存放路徑為C:/Java/jdk1.6.0_10/jre/lib/cacerts 而Tomcat 配置的JDK為C:/Java/jre6 ,使得兩者路徑不一致,SSL驗證的時候,找不到證書

13.No trusted certificate found
==========================================================================

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found

原因:信任證書庫文件路徑不正確
解決方法:將正確工程中 /WEB-INF/classes目錄下

14. error code 49
==========================================================================
javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 52e, vece
希望可以幫到你

4. 求LDAP在JAVA中取所有用戶信息的方法。

學習一下LDAP的查詢語法


http://wenku..com/view/854f4bc04028915f804dc27d.html



http://ke..com/view/159263.htm

5. java ldap根據用戶名查詢

search base ,ou=Sites,dc=asia,dc=jci,dc=com
filter ou=『user01'這樣就可以檢索到了。

6. LDAP在JAVA中如何模糊查詢

/** * 獲得LDAP連接(不通過連接池,直接獲得連接) * @return * @throws Exception */ private javax.naming.directory.DirContext getDirContext() throws Exception { DirContext ctx = null; java.util.Hashtable env = new java.util.Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://localhost:389"); env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, user); env.put(Context.SECURITY_CREDENTIALS, pwd); ctx = new InitialDirContext(env); return ctx; } /** * 返回用戶查詢介面 * @param DN 查找范圍 ou=test,dc=abcd,dc=com * @param filter 過濾條件 cn=* * @param myserach 搜索范圍 * @return LDAP標准介面 * @throws Exception */ public javax.naming.NamingEnumeration getFilter(String DN,String filter,int myserach) throws Exception { DirContext ctx = getDirContext(); try { NamingEnumeration em; SearchControls con = new SearchControls(); con.setSearchScope(myserach); em = ctx.search(DN, filter, con); return em; } finally { // } } /** * 設置條件查找 * @param dn 查找的根結點 * @param filter 查找條件 * @param level 查找范圍 * @return 返回一個由DN組成的JAVA STRING 列表 * @throws Exception */ public java.util.Vector getfilterNodes(String dn,String filter,int level) throws Exception { java.util.Vector ve=new java.util.Vector(); NamingEnumeration em=getFilter(dn,filter,level); while(em!=null && em.hasMoreElements()) { SearchResult rs=(SearchResult)em.nextElement(); String db=rs.getName(); if (db.trim().equals("")) ve.add(dn); else ve.add(db+","+dn); } return ve; }

7. java操作ldap的方式有幾種

我寫過這類代碼,與你這段代碼有些不一樣。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你先試一下吧,還有問題再討論,令附上LDAPERRORCODE:/index.php?title=LDAP_Error_Codes

閱讀全文

與javaldap查詢相關的資料

熱點內容
愛的共享韓 瀏覽:179
中文字幕推薦排行榜 瀏覽:589
李采鐔所有電影 瀏覽:348
前度2未刪減 瀏覽:866
日本一部關於平行時空的電影 瀏覽:346
傷寒論原文pdf 瀏覽:29
劇情肉的電影 瀏覽:803
下行 電影在線觀看 瀏覽:786
歐美大尺度男同電影 瀏覽:985
張學友最後大佬電影 瀏覽:777
心理罪中廖亞凡懷了孩子 瀏覽:844
伺服器如何開許可權設置密碼 瀏覽:271
申請資料填寫小程序源碼 瀏覽:177
伺服器怎麼私信別人 瀏覽:994
phpxdebug關閉 瀏覽:690
能看的網址大家都懂的 瀏覽:287
安卓程序員開發經驗 瀏覽:660
伺服器返回超時是怎麼回事 瀏覽:653
網關後dns伺服器有什麼用 瀏覽:607
line連接不上伺服器怎麼辦 瀏覽:862