标签: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