- 浏览: 161779 次
- 性别:
- 来自: 火星
文章分类
最新评论
-
zhangzhenting:
968862
EasyMock Capture的使用 -
andey007518:
不错,明天好试验试验
基于Axis2的WS构建服务端示例 -
Z_408:
谢谢,找好多例子终于成功一个了
Spring LDAP -
jyjava:
传说中单点登录,哈哈
中国移动4A系统账号密码管理方式 -
zhangzhenting:
sat on the fix ?? all day ???
TestNG plugin for Eclipse
初次对活动目录(AD)操作,记录下基本的操作方式。
import java.security.Security; import java.util.Hashtable; import javax.naming.AuthenticationException; import javax.naming.Context; import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.BasicAttribute; import javax.naming.directory.BasicAttributes; import javax.naming.directory.DirContext; import javax.naming.directory.ModificationItem; import javax.naming.ldap.Control; import javax.naming.ldap.InitialLdapContext; import javax.naming.ldap.LdapContext; public class ADTest { private LdapContext ctx = null; private String baseName = ",CN=users,DC=zzt,DC=com"; public ADTest() { try { Hashtable<String, String> ldapEnv = new Hashtable<String, String>(); ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); ldapEnv.put(Context.PROVIDER_URL, "ldap://192.168.0.1"); ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); ldapEnv.put(Context.SECURITY_PRINCIPAL, "CN=Administrator,CN=users,DC=zzt,DC=com"); ldapEnv.put(Context.SECURITY_CREDENTIALS, "123456"); // 密码 // ldapEnv.put(Context.SECURITY_PROTOCOL, "ssl"); ctx = new InitialLdapContext(ldapEnv, null); } catch (Exception e) { System.out.println(" bind error: " + e); e.printStackTrace(); } } /** * 创建一个新的用户 * @param username * @param surname * @param givenName */ public void createNew(String username, String surname, String givenName) { try { String distinguishedName = "cn=" + username + baseName; Attributes newAttributes = new BasicAttributes(true); Attribute oc = new BasicAttribute("objectclass"); oc.add("top"); oc.add("person"); oc.add("organizationalperson"); oc.add("user"); newAttributes.put(oc); newAttributes.put(new BasicAttribute("sAMAccountName", username)); newAttributes.put(new BasicAttribute("cn", username)); newAttributes.put(new BasicAttribute("sn", surname)); ctx.createSubcontext(distinguishedName, newAttributes); } catch (Exception e) { System.out.println("create error: " + e); e.printStackTrace(); System.exit(-1); } } /** * 更新用户 * @param username */ public void update(String username) { try { System.out.println("updating...\n"); ModificationItem[] mods = new ModificationItem[1]; mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("description", "hello world")); ctx.modifyAttributes("cn=" + username + baseName, mods); } catch (Exception e) { System.out.println(" update error: " + e); System.exit(-1); } } /** * 修改密码 * @param username * @param password */ public void updatePassword(String username, String password) { try { System.out.println("updating password...\n"); String quotedPassword = "\"" + password + "\""; // char unicodePwd[] = quotedPassword.toCharArray(); // byte pwdArray[] = new byte[unicodePwd.length * 2]; // for (int i = 0; i < unicodePwd.length; i++) // { // pwdArray[i * 2 + 1] = (byte) (unicodePwd[i] >>> 8); // pwdArray[i * 2 + 0] = (byte) (unicodePwd[i] & 0xff); // } // System.out.print("encoded password: "); // for (int i = 0; i < pwdArray.length; i++) // { // System.out.print(pwdArray[i] + " "); // } byte[] newUnicodePassword = quotedPassword.getBytes("UTF-16LE"); System.out.println(); ModificationItem[] mods = new ModificationItem[1]; mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("unicodePwd", newUnicodePassword)); ctx.modifyAttributes("cn=" + username + baseName, mods); } catch (Exception e) { System.out.println("update password error: " + e); e.printStackTrace(); System.exit(-1); } } /** * 登陆认证 * * @param userDn * String * @param password * String * @return boolean */ public boolean authenticate(String userDn, String password) { try { Control[] connCtls = new Control[] {}; ctx.getRequestControls(); ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, userDn); ctx.addToEnvironment(Context.SECURITY_CREDENTIALS, password); ctx.reconnect(connCtls); return true; } catch (AuthenticationException e) { return false; } catch (NamingException e) { return false; } finally { if (ctx != null) { try { ctx.close(); } catch (NamingException e) { e.printStackTrace(); } ctx = null; } } } /** * 删除用户. * * @param userDN * String 用户DN * @return */ public boolean del(String userDN) { try { ctx.destroySubcontext(userDN); return true; } catch (NamingException e) { System.err.println("Problem changing password: " + e); } catch (Exception e) { System.err.println("Problem: " + e); } finally { if (ctx != null) { try { ctx.close(); } catch (NamingException e) { e.printStackTrace(); } ctx = null; } } return false; } public static void main(String[] args) { Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); ADTest adt = new ADTest(); // System.out.println(adt.authenticate("CN=zztxxx,CN=users,DC=zzt,DC=com", "asdf23")); // System.out.println(adt.del("CN=zztxxx,CN=users,DC=zzt,DC=com")); } }
发表评论
-
测试static final 变量
2016-08-17 15:56 458private void setMockedLogg ... -
Java中调用Python代码
2016-05-17 17:22 681import org.python.core.PyFunct ... -
JAVA 练习题
2016-05-17 16:22 575需求:下面有两组数(由用户自定义)A: a1,a3,a3, ... -
JUnit培训(二)
2014-10-12 21:47 0问题: 1. 在Junit里面一些常用的方法? ... -
JUnit 培训计划
2014-10-12 21:42 628一、10/13 1. IDE 使用 2. ... -
乱码问题
2013-02-24 13:41 804我在myeclipse databae Explorer ... -
Log4j 配置
2013-02-24 11:37 923## LOGGERS ## #define a logg ... -
ReflectionTestUtils
2012-11-13 16:42 1127org.springframework.test.uti ... -
Spring与Testng整合
2013-02-25 16:00 1443Spring专门为Junit testNG提供了一套测试集成 ... -
Hibernate基础
2012-09-28 15:34 877hibernate工作原理: 1。 读取并解析配置 ... -
汉字与二进制的互相转换
2012-04-01 11:15 1983public class Test { public ... -
TestNG plugin for Eclipse
2012-03-02 14:42 1043Start Eclipse Select Help / I ... -
XML -> xsd -> Java
2011-08-08 13:51 1109XML Schema Generatorhttp://ww ... -
Hibernate EHCache
2010-09-14 14:43 1574By default, Hibernate uses EHCa ... -
Java加密技术
2010-07-22 10:53 1170很喜欢梁栋关于Java Security的文章,在这里做个汇总 ... -
中国移动4A系统账号密码管理方式
2010-07-09 15:47 15781好像现在很 ... -
统一授权管理
2010-07-07 11:24 1697用户授权管理在统一用户目录和统一资源目录的基础上,实现针对不同 ... -
操作日志队列
2010-06-25 17:27 785使用队列来记录日志 附件为测试代码 未完。。。 -
UAC产品集成策略
2010-06-22 10:10 1840接触UAC(Unified Authenticatio ... -
答复: 项目规划那些事
2010-06-12 16:27 852随便说说了,仅仅发表个人看法: 层 和 模块 不能混在一起谈 ...
相关推荐
总的来说,Java通过Ldap操作AD域涉及网络连接、身份验证、目录查询以及可能的SSL安全通信。理解这些概念和API的使用是实现AD域集成的关键。通过以上介绍和示例代码,你应该能够开始编写自己的AD域操作功能。记得在...
LDAP(Lightweight Directory Access Protocol)是一种目录访问协议,允许客户端访问和操作目录服务。 LDAP 广泛应用于企业目录服务中,如 Active Directory、OpenLDAP 等。 Java 使用 LDAP 修改 AD 域用户密码 在...
在提供的压缩包`springboot-ldap`中,应该包含了示例代码,展示如何在SpringBoot项目中配置和使用LDAP进行AD域账号验证。通过学习和理解这些代码,你可以更好地掌握如何在自己的项目中实现这一功能。务必仔细阅读并...
8. **示例代码**:可能提供了一些使用特定编程语言(如Java或Python)实现的示例代码,展示如何编写LDAP查询和操作。 9. **最佳实践**:关于在实际环境中使用LDAP访问AD时应遵循的一些最佳实践,以确保安全性和性能...
在提供的"demo"文件中,可能包含了实现上述功能的示例代码,包括Spring Boot配置、Spring Security LDAP配置、以及可能的同步逻辑。通过学习和理解这些代码,开发者可以掌握如何在自己的项目中实现类似的功能。 ...
本文将深入探讨 LDAP 如何与 WebLogic 和 AD 进行交互,以及在实际应用中的配置和操作。** **1. LDAP 与 Active Directory 的关系** LDAP 是一个开放标准,而 AD 是 LDAP 的一个实现。AD 使用 LDAP 协议来存储和...
本文将深入探讨如何使用Java进行LDAP与AD的连接,并通过提供的源代码示例进行解析。 首先,让我们了解LDAP与AD的基本概念。LDAP是一种应用层协议,它使用TCP/IP来查找和检索分布式目录服务中的信息。这些信息可以...
**LDAP加密访问AD(通过SSL,即LDAPS)在C++中的实现** LDAP(轻量级目录访问协议)是一种用于访问目录服务的标准网络协议,常用于管理用户身份验证和授权。在安全通信方面,LDAP over SSL(LDAPS)提供了一种加密...
Java 使用 LDAP 修改 AD 域中的用户密码是通过 Java 语言使用 LDAP 协议连接到 Active Directory 域控制器,以修改用户密码的操作。以下是相关知识点的详细解释。 一、LDAP 无法获取 Windows Active Directory 用户...
在IT领域,活动目录(Active Directory,简称AD)和轻量级目录访问协议(Lightweight Directory Access Protocol,简称LDAP)是两种重要的身份管理和目录服务技术。这篇内容将深入探讨如何使用Java来创建AD/LDAP账号...
对于非开发人员,还可以使用图形化的LDAP浏览器工具,如LdapAdmin或Softerra LDAP Administrator,它们提供了直观的界面来浏览和操作AD。 在实际应用中,LDAP访问AD的功能可能包括: 1. **用户身份验证**:登录...
使用`python-ldap`进行域认证,首先需要连接到LDAP服务器,然后执行搜索操作以找到用户账户,最后进行绑定。以下是一个简单的示例代码: ```python import ldap # 连接 LDAP 服务器 l = ldap.initialize('ldap://...
- **同步数据**: 如果有其他系统,比如AD(活动目录),可能需要与LDAP进行数据同步。 - **安全配置**: 为LDAP服务器配置SSL/TLS加密,确保数据传输安全。 3. **openLDAP网页参数配置** - **Apache Directory ...
'driver' => env('LDAP_DRIVER', 'ad'), 'host' => env('LDAP_HOST', 'localhost'), 'port' => env('LDAP_PORT', 389), 'base_dn' => env('LDAP_BASE_DN', ''), 'username' => env('LDAP_USERNAME', ''), '...
这个主题涉及几个关键知识点,包括Java LDAP API、SSL安全连接以及如何通过代码操作LDAP目录。 首先,LDAP是一个开放标准的协议,用于存储和检索用户、组、计算机等对象的数据。这些数据通常分布在多台服务器上,...