Java操作AD域LDAP操作学习日志

        最近本人在公司接到了java操作AD域的需求,具体老说是通过AD域里建立的用户可以导入到我的本地库,然后通过本地库创建的用户可以同步到AD域中。

        接到这个需求无从下手,后来了解到通过LDAP目录协议可以操作AD域用户,所以随便在网上找了关于java操作AD域的方法,看了很多人的方法,都是一般的增删该查,该开始以为这些操作已经满足了,后来发现,查询可以实现,删除可以实现,但是如果要添加一个已经开启的用户和修改用户密码这些代码都没有涉及到,后来想了想,这好像是一个技术问题,没有人肯公布出来这种办法,本人也比较愚钝,最后用了半个月的时间才整出来java完整操作AD域的方法。下面介绍一下解决过程。

        首先,我用到了SpringLdap去实现了普通的操作(查询,修改,删除),这些代码网上都可以找到,这个主要是用到了普通端口“"ldap://192.168.10.10:389"”,然后又用到了JNDI方面的东西,用这个方法进行了添加开启状态的用户并设置了永不过期的密码。具体代码我下边会贴出来。下面介绍一下里边的我遇到的盲点。

        第一就是刚开始添加用户老添加不进去,后来发现原因是,AD域用户里边有很多属性,你可以不去设置这些属性,如果要设置的话千万不能给个空值,然后是必须得了解你所操作的AD域的目录,一般都是这种格式“CN=lisi2,CN=Users,DC=vdidomain,DC=user,DC=com”,这个目录如果找不对的话什么也操作不了,然后想要建立开启的用户必须得用“"ldap://192.168.10.10:636"”端口进行操作,操作的前提是你要先在域里搭建一个CA证书的环境,然后把证书从服务器导出来,然后拿到本地通过keytool工具进行编译,这个编译的方法网上一搜一大把,我就不做解释了,编译好后直接引用“String keystore = "E:/JDK/64/JDK-1.7-64/bin/china-ops.keystore" System.setProperty("javax.net.ssl.trustStore", keystore);System.setProperty("javax.net.ssl.trustStorePassword", "******"); AD域用户的状态一般有三种,512/0x0200是开启,514/0x0200+0x0002是关闭,66048/0x10000+0x0200是密码永不过期,注意建用户的时候一定要先添加操作再进行修改。

       以上说的这些可能没有接触过的人有点看不懂,既然你要做这一块那就只有先了解一下基本知识再进行操作,要不然中间问题会有很多。想必拿到我这个代码之后也许两个小时之内你的问题就解决了,下面贴一下关键代码:

1,389端口操作

public class Test {
    public static void main(String[] args) throws Exception {
        BeanFactory cxt = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        PersonDao personDao = (PersonDao) cxt.getBean("personDao");
        Person person = new Person();
        person.setCn("lisi2");
        person.setSn("lisi2");
        

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
LDAP(Lightweight Directory Access Protocol)是一种轻量级目录访问协议,旨在提供对目录服务的快速访问。在Java中,可以通过使用JNDI(Java Naming and Directory Interface)API来操作LDAP。 下面是一些Java操作LDAP的常见步骤和示例代码: 1.创建连接对象 ``` Hashtable<String, String> env = new Hashtable<String, String>(); 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, "cn=admin,dc=example,dc=com"); env.put(Context.SECURITY_CREDENTIALS, "password"); DirContext ctx = new InitialDirContext(env); ``` 2.查询数据 ``` String base = "ou=people,dc=example,dc=com"; String filter = "(objectclass=person)"; SearchControls sc = new SearchControls(); sc.setSearchScope(SearchControls.SUBTREE_SCOPE); NamingEnumeration<SearchResult> results = ctx.search(base, filter, sc); while (results.hasMore()) { SearchResult sr = (SearchResult) results.next(); // 处理查询结果 } ``` 3.添加数据 ``` Attributes attrs = new BasicAttributes(); attrs.put("cn", "John Smith"); attrs.put("sn", "Smith"); attrs.put("givenName", "John"); attrs.put("mail", "[email protected]"); attrs.put("userPassword", "password"); ctx.createSubcontext("cn=John Smith,ou=people,dc=example,dc=com", attrs); ``` 4.修改数据 ``` ModificationItem[] mods = new ModificationItem[1]; mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("mail", "[email protected]")); ctx.modifyAttributes("cn=John Smith,ou=people,dc=example,dc=com", mods); ``` 5.删除数据 ``` ctx.destroySubcontext("cn=John Smith,ou=people,dc=example,dc=com"); ``` 这些是Java操作LDAP的一些基本步骤和示例代码,但实际应用中还需要考虑LDAP服务器的具体配置和授权等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值