Java LDAP 域名登录 或 AD域名登录实践记录

说是要使用这个ldap来实现第三方用户登录,估计是很古老的科技了,也估计就古老的企业使用这个技术吧。java

谁管你ldap或者ad是个啥玩意儿啊,我须要给你详细介绍一下吗?服务器

不,不须要,直接开干,怎么使用就完了,学习

就像开车同样,我特么还须要先学习一下发动机原理吗,测试

不用,有驾照,一脚油门,能起步就完啦,谁特么有空去管那个原理呀,纯属浪费时间。ui

下面是本身的实践记录3d

1,先是ldap域名登录。

/**
     * 测试LDAP认证
     * 这么测试就经过了,使用的环境,
     * 参看同目录下的
     * ladp_test.png
     * LDAP_TEST2.png
     *
     *
     * 实际使用ldap的现场配置的例子
     * 配置方式:
     * 域名:ldap.cdb.com.cn
     * 基本DN:ou=cdb,dc=intra,dc=cdb,dc=com,dc=cn
     * 绑定DN:cn=apmadmin,ou=APM,ou=Applications,ou=cdb,dc=intra,dc=cdb,dc=com,dc=cn
     * 密码:123asd!@#
     *
     */
    @Test
    public void myTest() {
        Hashtable<String, String> env = new Hashtable<>();
        env.put(Context.PROVIDER_URL, "ldap://192.168.1.43:389");
        env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.SECURITY_AUTHENTICATION, "simple");

        //图片ladp_test.png的参数配置
        //env.put(Context.SECURITY_PRINCIPAL, "uid=Michael,ou=Developer,dc=micmiu,dc=com");

        //图片LDAP_TEST2.png的参数配置
        env.put(Context.SECURITY_PRINCIPAL, "uid=Michael,ou=APM,ou=Applications,ou=cdb,dc=intra,dc=cdb,dc=com,dc=cn");

        env.put(Context.SECURITY_CREDENTIALS, "111111");
        env.put(Context.REFERRAL, "throw");
        try {
            DirContext ctx = new InitialDirContext(env);
            ctx.close();
            System.out.println("ok - ok");
        } catch (javax.naming.AuthenticationException e) {
            System.out.println("---------------域帐户认证失败:" + e.toString());
        } catch (Exception e) {
            System.out.println("---------------域帐户认证异常:" + e.toString());
        }
    }

上面的就是认证代码,只要不异常,那就算经过了域名认证了,下面就能够作其余的事情了。code

我这没有对这个域名登录的LDAP作太多的说明和解释。下面是部分字段的解释,不区分大小写的。blog

大师兄

下面是2个ldap服务器的配置的图图片

大师兄

对应上面代码中注释的描述:图片ladp_test.png的参数配置域名

大师兄

对应代码中未注释的那个:图片LDAP_TEST2.png的参数配置

代码里面的ctx使用完以后,没有以正确的姿式关闭,使用的老铁记得正规姿式关闭一下。跟管文件流一个姿式。

上面使用的登录的用户都是通常的用户。不是管理员的帐户。

下面是管理员帐户的状况

大师兄

最麻烦的地方,就是这个 Context.SECURITY_PRINCIPAL 这个key对应的值的设置,这个要是设置的不OK的话,登录就不OK。

2,AD域名认证

这个时候,上面代码差异就是对用户名对设置对差异

大师兄

就跟这个代码注释对差很少,须要个doMain对配置,而后是斜杠,而后是用户名。