`

java 通过LDAP 验证、添加、修改、删除

 
阅读更多

1. 域服务器(dc=dctest,dc=com),安装证书服务,创建企业根证书,名称为dctest.com

则:cn=dctest.com,dc=dctest,dc=com

2. 申请证书类型域控制器的证书

3. 将企业根证书和域控制器证书导入到应用服务器cacerts

4. 在应用程序中,编写代码引用cacerts认证。

keytool

  1. packagebof.usermanager.auth.impl;
  2. importjava.io.IOException;
  3. importjava.util.ArrayList;
  4. importjava.util.List;
  5. importjava.util.Properties;
  6. importjavax.naming.AuthenticationException;
  7. importjavax.naming.Context;
  8. importjavax.naming.NamingEnumeration;
  9. importjavax.naming.NamingException;
  10. importjavax.naming.directory.Attribute;
  11. importjavax.naming.directory.Attributes;
  12. importjavax.naming.directory.BasicAttribute;
  13. importjavax.naming.directory.BasicAttributes;
  14. importjavax.naming.directory.DirContext;
  15. importjavax.naming.directory.ModificationItem;
  16. importjavax.naming.directory.SearchControls;
  17. importjavax.naming.directory.SearchResult;
  18. importjavax.naming.ldap.Control;
  19. importjavax.naming.ldap.InitialLdapContext;
  20. importjavax.naming.ldap.LdapContext;
  21. importcom.report.service.PropertyItem;
  22. importcom.report.vo.OrganizationalUnitDomain;
  23. importcom.report.vo.UserDomain;
  24. /**
  25. *功能:本操作类提供AD域用户的增、删、查、改功能
  26. *作者:陈艺武
  27. *日期:2010-4-13
  28. */
  29. publicclassLdapADManager{
  30. protectedDataSourceConnectLDAPVOtransientInstance=null;
  31. /**用户的objectClass*/
  32. privateStringdefault_objectclass="user";
  33. /**用户的默认根DN*/
  34. privateStringdefault_base="CN=Users,DC=all,DC=com";
  35. /**用户默认主键*/
  36. privateStringkey_index="CN";
  37. /**用户默认密码属性.*/
  38. privateStringpwd_index="unicodePwd";
  39. privateControl[]connCtls=null;
  40. privatestaticLdapADManagerLdapADManager=null;
  41. privateLdapADManager(){}
  42. publicstaticLdapADManagergetInstance(){
  43. if(LdapADManager==null)
  44. LdapADManager=newLdapADManager();
  45. returnLdapADManager;
  46. }
  47. /**
  48. *从连接池中获取一个连接.
  49. *
  50. *@returnLdapContext
  51. *@throwsNamingException
  52. */
  53. publicLdapContextgetConnectionFromFool()throwsNamingException{
  54. PropertyItemldapProperty=(PropertyItem)AdProperties.getInstance().getPropertyItem().get(0);
  55. Stringkeystore="c:/Java/jdk1.6.0_10/jre/lib/security/cacerts";
  56. System.setProperty("javax.net.ssl.trustStore",keystore);
  57. Propertiesenv=newProperties();
  58. env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");
  59. env.put("com.sun.jndi.ldap.connect.pool","true");
  60. env.put(Context.SECURITY_AUTHENTICATION,"simple");
  61. env.put(Context.SECURITY_PROTOCOL,"ssl");
  62. //env.put("java.naming.referral","follow");
  63. env.put(Context.PROVIDER_URL,ldapProperty.getLdapURL());
  64. connCtls=newControl[]{newLdapADManagerControl()};
  65. returnnewInitialLdapContext(env,connCtls);
  66. }
  67. /**
  68. *功能:校验用户登录.
  69. *@paramuserName
  70. *@parampassword
  71. *@return
  72. *
  73. *作者:陈艺武
  74. *日期:Apr13,2010
  75. */
  76. publicbooleanauthenticate(StringuserName,Stringpassword){
  77. PropertyItemldapProperty=(PropertyItem)AdProperties.getInstance().getPropertyItem().get(0);
  78. StringuserDn=userName+"@"+ldapProperty.getDomain();
  79. LdapContextctx=null;
  80. try{
  81. ctx=getConnectionFromFool();
  82. ctx.getRequestControls();
  83. ctx.addToEnvironment(Context.SECURITY_PRINCIPAL,userDn);
  84. ctx.addToEnvironment(Context.SECURITY_CREDENTIALS,password);
  85. ctx.reconnect(connCtls);
  86. returntrue;
  87. }catch(AuthenticationExceptione){
  88. e.printStackTrace();
  89. returnfalse;
  90. }catch(NamingExceptione){
  91. e.printStackTrace();
  92. returnfalse;
  93. }finally{
  94. try{
  95. ctx.close();
  96. }catch(Exceptione){
  97. e.printStackTrace();
  98. }
  99. }
  100. }
  101. /**
  102. *功能:获取AD用户列表
  103. *@return
  104. *
  105. *作者:陈艺武
  106. *日期:Apr12,2010
  107. */
  108. publicListlistUser(){
  109. PropertyItemldapProperty=(PropertyItem)AdProperties.getInstance().getPropertyItem().get(0);
  110. Listlist=newArrayList();
  111. LdapContextctx=null;
  112. UserDomainuser=null;
  113. Stringbase="OU="+ldapProperty.getBase()+","+ldapProperty.getDomainDC();
  114. try{
  115. ctx=this.getConnectionFromFool();
  116. ctx.addToEnvironment(Context.SECURITY_PRINCIPAL,ldapProperty.getUserName()+"@"+ldapProperty.getDomain());
  117. ctx.addToEnvironment(Context.SECURITY_CREDENTIALS,ldapProperty.getPassWord());
  118. //base="OU=北京华融综合投资公司,DC=bjhr,DC=com,DC=cn";
  119. Stringfilter="(&(objectCategory=person)(objectClass=USER)(name=*))";
  120. SearchControlscontrols=newSearchControls();
  121. controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
  122. //controls.setReturningAttributes(newString[]{"sAMAccountName","displayName","department"});
  123. controls.setReturningAttributes(newString[]{"sAMAccountName","cn"});
  124. NamingEnumeration<SearchResult>answer=ctx.search(base,filter,controls);
  125. while(answer.hasMore()){
  126. user=newUserDomain();
  127. SearchResultresult=answer.next();
  128. NamingEnumeration<?extendsAttribute>attrs=result.getAttributes().getAll();
  129. intcount=0;
  130. while(attrs.hasMore()){
  131. Attributeattr=attrs.next();
  132. if(count==0){
  133. user.setUserName(attr.get().toString());
  134. }else{
  135. user.setUserAliasName(attr.get().toString());
  136. }
  137. count++;
  138. }
  139. user.setNameSpace(ldapProperty.getDomain());
  140. list.add(user);
  141. }
  142. }catch(Exceptione){
  143. e.printStackTrace();
  144. }finally{
  145. try{
  146. ctx.close();
  147. }catch(Exceptione){
  148. e.printStackTrace();
  149. }
  150. }
  151. returnlist;
  152. }
  153. /**
  154. *功能:查询组织单位列表
  155. *@paramouName
  156. *@return
  157. *
  158. *作者:陈艺武
  159. *日期:Apr13,2010
  160. *说明:base格式如:"OU=北京华融综合投资公司,DC=bjhr,DC=com,DC=cn";
  161. */
  162. publicListlistOrganizztionalUnit(StringouName){
  163. PropertyItemldapProperty=(PropertyItem)AdProperties.getInstance().getPropertyItem().get(0);
  164. Listlist=newArrayList();
  165. LdapContextctx=null;
  166. OrganizationalUnitDomainouDomain=null;
  167. Stringbase="OU="+ldapProperty.getBase()+","+ldapProperty.getDomainDC();
  168. try{
  169. ctx=this.getConnectionFromFool();
  170. ctx.addToEnvironment(Context.SECURITY_PRINCIPAL,ldapProperty.getUserName()+"@"+ldapProperty.getDomain());
  171. ctx.addToEnvironment(Context.SECURITY_CREDENTIALS,ldapProperty.getPassWord());
  172. Stringfilter="(&(objectClass=organizationalUnit)";
  173. if(ouName!=null&&!ouName.equals(""))
  174. filter=filter+"(name=*"+ouName+"*)";
  175. filter=filter+")";
  176. SearchControlscontrols=newSearchControls();
  177. controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
  178. controls.setReturningAttributes(newString[]{"name"});
  179. NamingEnumeration<SearchResult>answer=ctx.search(base,filter,controls);
  180. while(answer.hasMore()){
  181. ouDomain=newOrganizationalUnitDomain();
  182. SearchResultresult=answer.next();
  183. NamingEnumeration<?extendsAttribute>attrs=result.getAttributes().getAll();
  184. intcount=0;
  185. while(attrs.hasMore()){
  186. Attributeattr=attrs.next();
  187. if(count==0){
  188. ouDomain.setOuName(attr.get().toString());
  189. }
  190. count++;
  191. }
  192. list.add(ouDomain);
  193. }
  194. }catch(Exceptione){
  195. e.printStackTrace();
  196. }finally{
  197. try{
  198. ctx.close();
  199. }catch(Exceptione){
  200. e.printStackTrace();
  201. }
  202. }
  203. returnlist;
  204. }
  205. /**
  206. *功能:添加用户
  207. *@paramou组织单位:中投证券,销售部门
  208. *@paramdepartment
  209. *@paramrealName真实姓名,如:李伟
  210. *@paramuserName用户名,如:administrator
  211. *@paramuserPwd
  212. *@paramadminUser
  213. *@paramadminPwd
  214. *@return
  215. *
  216. *作者:陈艺武
  217. *日期:Apr12,2010
  218. */
  219. publicbooleanaddUser(Stringou,Stringdepartment,StringrealName,StringuserName,StringadminUser,StringadminPwd){
  220. PropertyItemldapProperty=(PropertyItem)AdProperties.getInstance().getPropertyItem().get(0);
  221. LdapContextctx=null;
  222. try{
  223. ctx=getConnectionFromFool();
  224. Attributesattrs=newBasicAttributes(true);
  225. Attributeobjclass=newBasicAttribute("objectclass");
  226. setObjectclassToAttribute(objclass);
  227. attrs.put(objclass);
  228. attrs.put("sAMAccountName",userName);
  229. attrs.put("cn",realName);
  230. intUF_ACCOUNTDISABLE=0x0002;
  231. intUF_PASSWD_NOTREQD=0x0020;
  232. intUF_NORMAL_ACCOUNT=0x0200;
  233. intUF_PASSWORD_EXPIRED=0x800000;
  234. attrs.put("userAccountControl",Integer.toString(UF_NORMAL_ACCOUNT+UF_PASSWD_NOTREQD+UF_PASSWORD_EXPIRED+UF_ACCOUNTDISABLE));
  235. ctx.addToEnvironment(Context.SECURITY_PRINCIPAL,adminUser+"@"+ldapProperty.getDomain());
  236. ctx.addToEnvironment(Context.SECURITY_CREDENTIALS,adminPwd);
  237. //StringnewUser="CN="+realName+","+cvtOuString(ou)+","+ldapProperty.getDomainDC();
  238. StringnewUser="CN="+realName+","+this.getFullOu(ctx,ou)+","+ldapProperty.getDomainDC();
  239. ctx.createSubcontext(newUser,attrs);
  240. ModificationItem[]mods=newModificationItem[2];
  241. StringnewQuotedPassword="/""+userName+"/"";
  242. byte[]newUnicodePassword=newQuotedPassword.getBytes("UTF-16LE");
  243. mods[0]=newModificationItem(DirContext.REPLACE_ATTRIBUTE,newBasicAttribute("unicodePwd",newUnicodePassword));
  244. mods[1]=newModificationItem(DirContext.REPLACE_ATTRIBUTE,newBasicAttribute("userAccountControl",Integer.toString(UF_NORMAL_ACCOUNT+UF_PASSWORD_EXPIRED)));
  245. ctx.modifyAttributes(newUser,mods);
  246. mods=null;
  247. returntrue;
  248. }catch(NamingExceptione){
  249. e.printStackTrace();
  250. }catch(IOExceptione){
  251. e.printStackTrace();
  252. }finally{
  253. if(ctx!=null){
  254. try{
  255. ctx.close();
  256. }catch(NamingExceptione){
  257. e.printStackTrace();
  258. }
  259. ctx=null;
  260. }
  261. }
  262. returnfalse;
  263. }
  264. /**
  265. *功能:管理员用户初始化用户密码
  266. *@paramsUserName
  267. *@paramsNewPassword
  268. *@return
  269. *
  270. *作者:陈艺武
  271. *日期:Apr13,2010
  272. */
  273. publicbooleanadminChangePassword(StringadminUser,StringadminPwd,StringsUserName){
  274. PropertyItemldapProperty=(PropertyItem)AdProperties.getInstance().getPropertyItem().get(0);
  275. LdapContextctx=null;
  276. //不能从应用中修改超级管理员密码
  277. if(sUserName!=null&&sUserName.equalsIgnoreCase("administrator"))
  278. returnfalse;
  279. try{
  280. ctx=getConnectionFromFool();
  281. ctx.addToEnvironment(Context.SECURITY_PRINCIPAL,adminUser+"@"+ldapProperty.getDomain());
  282. ctx.addToEnvironment(Context.SECURITY_CREDENTIALS,adminPwd);
  283. ModificationItem[]mods=newModificationItem[1];
  284. StringnewQuotedPassword="/""+sUserName+"/"";
  285. byte[]newUnicodePassword=newQuotedPassword.getBytes("UTF-16LE");
  286. mods[0]=newModificationItem(DirContext.REPLACE_ATTRIBUTE,newBasicAttribute("unicodePwd",newUnicodePassword));
  287. StringcnUser=getUser(ctx,sUserName)+","+ldapProperty.getDomainDC();
  288. ctx.modifyAttributes(cnUser,mods);
  289. returntrue;
  290. }catch(Exceptione){
  291. e.printStackTrace();
  292. }finally{
  293. try{
  294. ctx.close();
  295. }catch(Exceptione){
  296. e.printStackTrace();
  297. }
  298. }
  299. returnfalse;
  300. }
  301. /**
  302. *功能:用户修改密码
  303. *@paramsUserName
  304. *@paramsOldPassword
  305. *@paramsNewPassword
  306. *@return
  307. *
  308. *作者:陈艺武
  309. *日期:Apr9,2010
  310. */
  311. publicbooleanuserChangePassword(StringsUserName,StringsOldPassword,StringsNewPassword){
  312. PropertyItemldapProperty=(PropertyItem)AdProperties.getInstance().getPropertyItem().get(0);
  313. LdapContextctx=null;
  314. StringuserNameAndDomain=sUserName+"@"+ldapProperty.getDomain();
  315. //不能从应用中修改超级管理员密码
  316. if(sUserName!=null&&sUserName.equalsIgnoreCase("administrator"))
  317. returnfalse;
  318. try{
  319. ctx=getConnectionFromFool();
  320. ctx.addToEnvironment(Context.SECURITY_PRINCIPAL,userNameAndDomain);
  321. ctx.addToEnvironment(Context.SECURITY_CREDENTIALS,sOldPassword);
  322. ModificationItem[]mods=newModificationItem[2];
  323. StringoldQuotedPassword="/""+sOldPassword+"/"";
  324. byte[]oldUnicodePassword=oldQuotedPassword.getBytes("UTF-16LE");
  325. StringnewQuotedPassword="/""+sNewPassword+"/"";
  326. byte[]newUnicodePassword=newQuotedPassword.getBytes("UTF-16LE");
  327. mods[0]=newModificationItem(DirContext.REMOVE_ATTRIBUTE,newBasicAttribute("unicodePwd",oldUnicodePassword));
  328. mods[1]=newModificationItem(DirContext.ADD_ATTRIBUTE,newBasicAttribute("unicodePwd",newUnicodePassword));
  329. StringcnUser=getUser(ctx,sUserName)+","+ldapProperty.getDomainDC();
  330. ctx.modifyAttributes(cnUser,mods);
  331. returntrue;
  332. }catch(Exceptione){
  333. e.printStackTrace();
  334. }finally{
  335. try{
  336. ctx.close();
  337. }catch(Exceptione){
  338. e.printStackTrace();
  339. }
  340. }
  341. returnfalse;
  342. }
  343. /**
  344. *功能:修改用户信息
  345. *@paramattrs
  346. *@paramuserDN
  347. *@return
  348. *
  349. *作者:陈艺武
  350. *日期:Apr12,2010
  351. */
  352. publicbooleanmodify(Attributesattrs,StringuserDN){
  353. LdapContextctx=null;
  354. try{
  355. ctx=getConnectionFromFool();
  356. attrs.remove(key_index);
  357. ctx.modifyAttributes(userDN,DirContext.REPLACE_ATTRIBUTE,attrs);
  358. returntrue;
  359. }catch(NamingExceptione){
  360. System.err.println("Problemchangingpassword:"+e);
  361. }catch(Exceptione){
  362. System.err.println("Problem:"+e);
  363. }finally{
  364. try{
  365. ctx.close();
  366. }catch(Exceptione){
  367. e.printStackTrace();
  368. }
  369. }
  370. returnfalse;
  371. }
  372. /**
  373. *功能:删除用户
  374. *@paramadminUser
  375. *@paramadminPwd
  376. *@paramuserDN用户登陆名
  377. *@return
  378. *
  379. *作者:陈艺武
  380. *日期:Apr12,2010
  381. */
  382. publicbooleandel(StringadminUser,StringadminPwd,StringuserName){
  383. PropertyItemldapProperty=(PropertyItem)AdProperties.getInstance().getPropertyItem().get(0);
  384. LdapContextctx=null;
  385. try{
  386. ctx=getConnectionFromFool();
  387. ctx.addToEnvironment(Context.SECURITY_PRINCIPAL,adminUser+"@"+ldapProperty.getDomain());
  388. ctx.addToEnvironment(Context.SECURITY_CREDENTIALS,adminPwd);
  389. StringadUser=getUser(ctx,userName)+","+ldapProperty.getDomainDC();
  390. ctx.destroySubcontext(adUser);
  391. returntrue;
  392. }catch(NamingExceptione){
  393. System.err.println("Problemchangingpassword:"+e);
  394. }catch(Exceptione){
  395. System.err.println("Problem:"+e);
  396. }finally{
  397. try{
  398. ctx.close();
  399. }catch(Exceptione){
  400. e.printStackTrace();
  401. }
  402. }
  403. returnfalse;
  404. }
  405. privatevoidsetObjectclassToAttribute(Attributeobjclass){
  406. objclass.add("top");
  407. objclass.add("person");
  408. objclass.add("organizationalPerson");
  409. objclass.add("inetorgperson");
  410. }
  411. privateStringgetUser(LdapContextctx,Stringusr){
  412. StringuserName="";
  413. Stringfilter="sAMAccountName="+usr;
  414. SearchResultsi=getSearchResult(ctx,filter);
  415. if(si!=null)
  416. userName=si.getName();
  417. returnuserName;
  418. }
  419. privateStringgetFullOu(LdapContextctx,Stringou){
  420. StringuserName="";
  421. Stringfilter="(&(objectClass=organizationalUnit)(name="+ou+"))";
  422. SearchResultsi=getSearchResult(ctx,filter);
  423. if(si!=null)
  424. userName=si.getName();
  425. returnuserName;
  426. }
  427. privateSearchResultgetSearchResult(LdapContextctx,Stringfilter){
  428. SearchResultsi=null;
  429. PropertyItemldapProperty=(PropertyItem)AdProperties.getInstance().getPropertyItem().get(0);
  430. try{
  431. SearchControlsconstraints=newSearchControls();
  432. co<mce:scripttype="text/javascript"src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js"mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js"></mce:script><mce:scripttype="text/javascript"src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js"mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js"></mce:script>nstraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
  433. NamingEnumerationen=ctx.search(ldapProperty.getDomainDC(),filter,constraints);//查询所有用户
  434. while(en!=null&&en.hasMoreElements()){
  435. Objectobj=en.nextElement();
  436. if(objinstanceofSearchResult){
  437. si=(SearchResult)obj;
  438. break;
  439. }
  440. }
  441. }catch(NamingExceptionex){
  442. ex.printStackTrace();
  443. }
  444. returnsi;
  445. }
  446. }
  447. classLdapADManagerControlimplementsControl{
  448. publicbyte[]getEncodedValue(){
  449. returnnull;
  450. }
  451. publicStringgetID(){
  452. return"1.2.840.113556.1.4.1781";
  453. }
  454. publicbooleanisCritical(){
  455. returntrue;
  456. }
  457. }

分享到:
评论

相关推荐

    java连接和验证ldap文档

    Java 连接和验证 LDAP 文档 Java 连接和验证 LDAP 文档是一份关于 Java 语言连接和验证 LDAP 服务器的学习文档。LDAP(Lightweight Directory Access Protocol)是一种目录访问协议,用于管理和访问目录服务中的...

    java操作LDAP的架包

    在Java中,我们可以使用各种库来实现与LDAP服务器的交互,这些库提供了丰富的API,使得开发人员能够轻松地进行查询、添加、删除和修改目录记录。本篇将详细介绍Java与LDAP的集成以及相关知识点。 1. LDAP简介: ...

    LDAP.rar_java ldap_ldap_ldap java

    这个API包含在Java的`javax.naming`和`javax.naming.ldap`包中,提供了丰富的类和接口,如`InitialLdapContext`、`NamingEnumeration`和`DirContext`等,使得开发者能够方便地执行LDAP操作,如查找、添加、删除和...

    LDAP_programming_With_Java.zip_java ldap_java ldap_java program

    通过JNDI,开发者可以执行搜索、添加、删除和修改目录条目等操作。 3. **连接LDAP服务器**:使用JNDI建立到LDAP服务器的连接,需要配置初始上下文(Initial Context)并提供连接参数,如服务器地址、端口和安全设置...

    JAVA中使用LDAP进行用户认证.pdf

    - 成功后,`getCtx()`返回`DirContext`实例,可用于后续操作,如搜索、添加、修改或删除目录条目。 3. **关闭连接:**通过`closeCtx()`方法关闭与LDAP服务器的连接,释放资源,避免内存泄漏。 #### 密码处理技巧 ...

    Ldap文件读取工具(Java)

    通过JNDI,我们可以执行查找、添加、删除和修改目录中的条目等操作。** **使用Java进行LDAP操作时,主要涉及以下几个步骤:** 1. **连接 LDAP 服务器**:首先,需要建立一个环境属性对象,并配置 LDAP 服务器的URL...

    jndi.zip_java ldap_jndi_jndi ldap_ldap_ldap java

    通过JNDI,Java开发者可以方便地与LDAP服务器进行交互,实现诸如连接、添加、删除、修改和搜索等操作。 1. **JNDI基础** JNDI是一个接口,提供了一种统一的方式来查找和管理各种命名和目录服务,包括 LDAP、DNS、...

    LDAP java 操作

    **LDAP (轻量级目录访问协议) 是一种用于访问和管理分布式目录服务的标准协议,广泛应用于企业环境中的用户身份验证和授权。在Java中,我们可以使用JNDI(Java Naming and Directory Interface)来操作LDAP服务器,...

    ldap开发包(java)

    这个API是Java命名和目录接口(JNDI)的一部分,提供了一组类和接口,使得开发者可以方便地执行如搜索、添加、删除、修改和比较目录条目的操作。 **Java LDAP API组件** 1. **NamingContext**: 这是JNDI的核心接口...

    LDAP以及JAVA方法操作详解.doc

    4. **修改条目**:如果需要更新目录中的信息,可以使用`DirContext.modifyAttributes()`方法,传入DN和修改的操作(如添加、删除或替换属性)。 5. **创建和删除条目**:使用`DirContext.createSubcontext()`创建新...

    活动目录编程(LDAP)

    - 单点登录(SSO):通过LDAP实现跨多个系统的统一身份验证。 - 系统配置管理:使用LDAP存储和分发系统配置信息,简化运维工作。 总结来说,LDAP是实现目录服务的关键协议,而活动目录是其在Windows环境中的具体...

    spring-ldap1.3.1

    同时,通过单元测试来验证LDAP操作的有效性也很重要。 总之,Spring LDAP 1.3.1为Java开发者提供了一种高效且易于使用的工具,以处理与LDAP服务器的交互。通过它的强大功能,开发者可以更加专注于业务逻辑,而无需...

    CentOS上安装LDAP,Java访问LDAP数据。

    总结,本文详细介绍了如何在CentOS上安装和配置LDAP服务器,以及如何使用Java通过JNDI接口访问LDAP数据。同时,还解释了LDIF文件的作用,并提供了导入数据的基本命令。通过这些知识,你可以构建和管理自己的LDAP目录...

    novell ldap开发包(java)

    3. 添加、修改和删除条目:开发包支持对目录中的条目执行CRUD操作。例如,可以创建新的用户账户,更新用户信息,或者删除不再需要的条目。 4. 绑定和解绑:LDAP协议基于认证的上下文操作,开发包提供了方便的方法...

    LDAP Browser

    LDAP操作主要包括bind(绑定)、search(搜索)、compare(比较)、delete(删除)、modify(修改)、add(添加)等。 **3. Java环境下的LDAP浏览器** 由于"LDAP Browser"是基于Java开发的,因此使用前需要确保...

    LDAP类库,方便操作LDAP的类库

    类库通常包含了各种预定义的方法和函数,用于执行常见的LDAP操作,如搜索、添加、删除、修改条目,以及绑定和解绑到LDAP服务器。 ### 类库的核心功能 1. **连接与身份验证**:类库提供了连接到 LDAP 服务器的方法...

    ldapbrowser,LDAP连接工具

    4. **编辑与管理**:用户可以添加、修改或删除LDAP条目,以及它们的属性和值。 5. **导入与导出**:方便地将目录数据导入或导出到文件,便于备份和迁移。 6. **日志记录与审计**:记录所有操作,以供审核和故障...

    ldapmd5加密

    它可能包含连接LDAP服务器、执行搜索、添加、修改和删除条目的方法。同时,`LdapMd5.java`很可能包含了MD5加密的逻辑,比如一个`encryptPassword`方法,该方法接收明文密码,返回其MD5加密后的值。 在实际应用中,...

    基于springldap的增删改查以及验证

    基于LDAP的用户验证是通过`LdapAuthenticationProvider`实现的,它是Spring Security的一部分。首先,配置`LdapAuthenticationProvider`,设置LDAP连接信息和用户搜索策略。然后,当用户尝试登录时,Spring Security...

Global site tag (gtag.js) - Google Analytics