使用JAVA進行ad域身份驗證常用屬性詳解

業餘草發表於2014-12-29
一些變態的公司經常對開發者提出一些變態的問題。比如在oa系統中,要求登入驗證必須使用ad域進行登入。還有的如登入crm系統必須使用公司的阿里雲郵箱賬號進行身份驗證等等。
作為程式設計師我們只能按照客戶的需求進行完善系統。畢竟客戶才是我們的衣食父母,沒辦法拒絕。我這裡就列舉一些,在系統中整合ad域身份驗證的一些配置資訊,並一一解釋他們的作用。
直接看程式碼:
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共同學習!

相關文章