说是要使用这个ldap来实现第三方用户登陆,估计是很古老的科技了,也估计就古老的企业使用这个技术吧。
谁管你ldap或者ad是个啥玩意儿啊,我需要给你详细介绍一下吗?
不,不需要,直接开干,怎么使用就完了,
就像开车一样,我特么还需要先学习一下发动机原理吗,
不用,有驾照,一脚油门,能起步就完啦,谁特么有空去管那个原理呀,纯属浪费时间。
下面是自己的实践记录
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());
}
}
上面的就是认证代码,只要不异常,那就算通过了域名认证了,下面就可以做其他的事情了。
我这没有对这个域名登陆的LDAP做太多的说明和解释。下面是部分字段的解释,不区分大小写的。
下面是2个ldap服务器的配置的图
对应上面代码中注释的描述:图片ladp_test.png的参数配置
对应代码中未注释的那个:图片LDAP_TEST2.png的参数配置
哦
代码里面的ctx使用完之后,没有以正确的姿势关闭,使用的老铁记得正规姿势关闭一下。跟管文件流一个姿势。
上面使用的登陆的用户都是一般的用户。不是管理员的账户。
下面是管理员账户的情况
最麻烦的地方,就是这个 Context.SECURITY_PRINCIPAL 这个key对应的值的设置,这个要是设置的不OK的话,登陆就不OK。
2,AD域名认证
这个时候,上面代码差别就是对用户名对设置对差别
就跟这个代码注释对差不多,需要个doMain对配置,然后是斜杠,然后是用户名。