标签:ad域身份验证 ldap ldapctxfactory initialldapcontext namingenumeration
一些变态的公司经常对开发者提出一些变态的问题。比如在oa系统中,要求登录验证必须使用ad域进行登录。还有的如登录crm系统必须使用公司的阿里云邮箱账号进行身份验证等等。public boolean login() {
// 判断必填字段是否全部填写
if (StringUtils.isEmpty(this.username)
|| StringUtils.isEmpty(this.domain)
|| StringUtils.isEmpty(this.ip)) {
logger.info("必填信息为空,LDAP连接失败!");
return false;
}
Properties env = new Properties();
String account = this.username + "@" + this.domain;
String ldapURL = "LDAP://" + this.ip + ":" + this.port;
env.put(Context.PROVIDER_URL, ldapURL);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, account);
env.put(Context.SECURITY_CREDENTIALS, this.password);
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
//批量处理
env.put(Context.BATCHSIZE, "50");
// 连接超时设置
env.put("com.sun.jndi.ldap.connect.timeout", "3000");
// LDAP连接池
env.put("com.sun.jndi.ldap.connect.pool", "true");
// LDAP连接池最大数
env.put("com.sun.jndi.ldap.connect.pool.maxsize", "3");
// LDAP连接池优先数
env.put("com.sun.jndi.ldap.connect.pool.prefsize", "1");
// LDAP连接池超时
env.put("com.sun.jndi.ldap.connect.pool.timeout", "300000");
// LDAP连接池初始化数
env.put("com.sun.jndi.ldap.connect.pool.initsize", "1");
// LDAP连接池的认证方式
env.put("com.sun.jndi.ldap.connect.pool.authentication", "simple");
try {
dc = new InitialLdapContext(env, null);
logger.info("域用户" + this.username + " 登录" + account + "成功!");
return true;
} catch (Exception e) {
logger.info("域用户" + this.username + " 登录" + account + "失败!");
return false;
}
}欢迎大家关注我的博客!如有疑问,请加QQ群:135430763共同学习!标签:ad域身份验证 ldap ldapctxfactory initialldapcontext namingenumeration
原文地址:http://blog.csdn.net/xmtblog/article/details/42237603