java連接到ldap,java連接到資料庫

本文目錄一覽:

java 連接 ldap 報錯

應該是用戶名寫的不對,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″)

如何使用Java操作LDAP之LDAP連接

public static void main(String[] args) {

String url = “ldap://10.0.0.10:389/”;

String domain = “dc=dtas,dc=com”;

String user = “cn=administrator,cn=users”;

String password = “111111”;

HashtableString, String env = new HashtableString, String();

env.put(Context.INITIAL_CONTEXT_FACTORY, “com.sun.jndi.ldap.LdapCtxFactory”); // LDAP 工廠

env.put(Context.SECURITY_AUTHENTICATION, “simple”); // LDAP訪問安全級別

env.put(Context.PROVIDER_URL, url);

env.put(Context.SECURITY_PRINCIPAL, user+”,”+domain); // 填DN

env.put(Context.SECURITY_CREDENTIALS, password); // AD Password

env.put(“java.naming.ldap.attributes.binary”, “objectSid objectGUID”);

LdapContext ldapCtx = null;

try {

ldapCtx = new InitialLdapContext(env , null);

queryGroup(ldapCtx);

//queryUser(ldapCtx);

} catch (NamingException e) {

e.printStackTrace();

} finally {

if(ldapCtx != null) {

try {

ldapCtx.close();

} catch (NamingException e) {

}

}

}

}

private static void queryGroup(LdapContext ldapCtx) throws NamingException {

SearchControls searchCtls = new SearchControls();

searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);

String searchFilter = “objectClass=organizationalUnit”;

String searchBase = “ou=myDeptSubDept,ou=myDept,dc=DS-66,dc=com”;

String returnedAtts[] = {“distinguishedName”, “objectGUID”, “name”};

searchCtls.setReturningAttributes(returnedAtts);

NamingEnumerationSearchResult answer = ldapCtx.search(searchBase, searchFilter, searchCtls);

while (answer.hasMoreElements()) {

SearchResult sr = answer.next();

Attributes Attrs = sr.getAttributes();

if (Attrs != null) {

NamingEnumeration? ne = Attrs.getAll();

while(ne.hasMore()) {

Attribute Attr = (Attribute)ne.next();

String name = Attr.getID();

Enumeration? values = Attr.getAll();

if (values != null) { // 迭代

while (values.hasMoreElements()) {

String value = “”;

if(“objectGUID”.equals(name)) {

value = UUID.nameUUIDFromBytes((byte[]) values.nextElement()).toString();

} else {

value = (String)values.nextElement();

}

System.out.println(name + ” ” + value);

}

}

}

System.out.println(“=====================”);

}

}

}

如何使用java鏈接ldap資料庫

public static void main(String[] args) {

String url = “ldap://10.0.0.10:389/”;

String domain = “dc=dtas,dc=com”;

String user = “cn=administrator,cn=users”;

String password = “111111”;

HashtableString, String env = new HashtableString, String();

env.put(Context.INITIAL_CONTEXT_FACTORY, “com.sun.jndi.ldap.LdapCtxFactory”); // LDAP 工廠

env.put(Context.SECURITY_AUTHENTICATION, “simple”); // LDAP訪問安全級別

env.put(Context.PROVIDER_URL, url);

env.put(Context.SECURITY_PRINCIPAL, user+”,”+domain); // 填DN

env.put(Context.SECURITY_CREDENTIALS, password); // AD Password

env.put(“java.naming.ldap.attributes.binary”, “objectSid objectGUID”);

LdapContext ldapCtx = null;

try {

ldapCtx = new InitialLdapContext(env , null);

queryGroup(ldapCtx);

//queryUser(ldapCtx);

} catch (NamingException e) {

e.printStackTrace();

} finally {

if(ldapCtx != null) {

try {

ldapCtx.close();

} catch (NamingException e) {

}

}

}

}

private static void queryGroup(LdapContext ldapCtx) throws NamingException {

SearchControls searchCtls = new SearchControls();

searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);

String searchFilter = “objectClass=organizationalUnit”;

String searchBase = “ou=myDeptSubDept,ou=myDept,dc=DS-66,dc=com”;

String returnedAtts[] = {“distinguishedName”, “objectGUID”, “name”};

searchCtls.setReturningAttributes(returnedAtts);

NamingEnumerationSearchResult answer = ldapCtx.search(searchBase, searchFilter, searchCtls);

while (answer.hasMoreElements()) {

SearchResult sr = answer.next();

Attributes Attrs = sr.getAttributes();

if (Attrs != null) {

NamingEnumeration? ne = Attrs.getAll();

while(ne.hasMore()) {

Attribute Attr = (Attribute)ne.next();

String name = Attr.getID();

Enumeration? values = Attr.getAll();

if (values != null) { // 迭代

while (values.hasMoreElements()) {

String value = “”;

if(“objectGUID”.equals(name)) {

value = UUID.nameUUIDFromBytes((byte[]) values.nextElement()).toString();

} else {

value = (String)values.nextElement();

}

System.out.println(name + ” ” + value);

}

}

}

System.out.println(“=====================”);

}

}

}

java 訪問ldap伺服器,把dn下的樹目錄全部讀取出來

拿到一個 InitialContext 之後 list(“”); 就得到了一個集合,然後遍歷這個 Enumeration 對象得到每個 Binding,它有 key 和 value,如果 value 是一個 Context 就是子目錄了,再用 context.list(“”) 得到下面的子條目。遞歸你熟練吧。

在 InitialContext 中要先得到你的 root context,比如你可以先找公司的 Active X 域伺服器練習一下,或安裝一個 OpenLDAP 來練習。在 Active X 中,你能從自己的賬戶名看出規律的。

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

出自

1. error code 53

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

問題:創建新用戶時出現數據後端異常

在 WebSphere Portal Express 中,您可以設置密碼的最短和最長長度。如果設置的密碼長度與 LDAP 伺服器的策略不相同,則在創建用戶時您可能會看到以下異常:

EJPSG0015E: Data Backend Problem com.ibm.websphere.wmm.exception.WMMSystemException:

The following Naming Exception occurred during processing:

“javax.naming.OperationNotSupportedException: [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.InvalidAttributeValueException: [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

希望可以幫到你

使用java連接LDAP伺服器進行賬號驗證時,當用戶被禁用,返回什麼異常.

Context.SECURITY_PRINCIPAL這個相當於。不給你你怎麼登陸ldap伺服器。估計你能給出客戶給了哪些信息嗎。不需要你全部給出。

原創文章,作者:YPMRK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/313443.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
YPMRK的頭像YPMRK
上一篇 2025-01-07 09:43
下一篇 2025-01-07 09:43

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29

發表回復

登錄後才能評論