说是要使用这个ldap来实现第三方用户登录,估计是很古老的科技了,也估计就古老的企业使用这个技术吧。java
谁管你ldap或者ad是个啥玩意儿啊,我须要给你详细介绍一下吗?服务器
不,不须要,直接开干,怎么使用就完了,学习
就像开车同样,我特么还须要先学习一下发动机原理吗,测试
不用,有驾照,一脚油门,能起步就完啦,谁特么有空去管那个原理呀,纯属浪费时间。ui
下面是本身的实践记录3d
/** * 测试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。
这个时候,上面代码差异就是对用户名对设置对差异
就跟这个代码注释对差很少,须要个doMain对配置,而后是斜杠,而后是用户名。